Browse thread
Debugging C and OCaml
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2010-03-02 (00:52) |
From: | Jianzhou Zhao <jianzhou@s...> |
Subject: | Re: [Caml-list] Debugging C and OCaml |
On Mon, Mar 1, 2010 at 7:48 PM, Jianzhou Zhao <jianzhou@seas.upenn.edu> wrote: > On Mon, Mar 1, 2010 at 10:19 AM, Mark Shinwell <mshinwell@janestreet.com> wrote: >> On Mon, Mar 01, 2010 at 10:10:44AM -0500, Jianzhou Zhao wrote: >>> My main program is C++. It uses C functions to call >>> OCaml functions, and these OCaml functions also call >>> C functions and wrapped C++ functions sometimes. >>> >>> I can debug from C++, but it stops when it meets >>> an OCaml binding. Does anyone know an efficient >>> solution about how to debug across different languages? >> >> Is this native code compilation? > > I compiled OCaml code into *.o by 'ocamlc -custom -output-obj...', > and then linked it with *.o from C and C++ code. > I think this isnt a native compilation. > > My main C++ program is eventually compiled into a shared library. > If I do 'ocamlopt', ld reports: > /usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld: > /mnt/eclipse/acg/users/jianzhou/tools/ocaml-3.11.2//lib/ocaml/libasmrun.a(amd64.o): > relocation R_X86_64_PC32 against symbol `caml_last_return_address' can > not be used when making a shared object; recompile with -fPIC > > So I am doing ''ocamlc -custom' for the time being. > >> >> If so, you should be able to use gdb to debug into the Caml bindings at the >> assembly level -- does that work? Unfortunately at the moment there is no Caml >> compiler support for emitting the debug info required by gdb to debug at the >> language level. That said, ocamlopt-compiled assembly code is fairly easy to >> read, and you should be able to get something resembling a backtrace using >> "where". > > Now I can debug into OCaml assembly from C, and its stack frames. > > #0 0x00007ffff6cad3f4 in caml_interprete () > #1 0x00007ffff6caa54f in caml_callbackN_exn () > #2 0x00007ffff6caa64a in caml_callback_exn () > #3 0x00007ffff6caa658 in caml_callback () > ... > > It seems that OCaml runtime is interpreting via 'caml_interprete' the > OCaml function which C > calls at runtime. If this is true, we cannot really debug that OCaml > function, but we can > see how it is interpreted. But I guess we can debug the real assembly if I do > native compilation. If we do native compilation, will each OCaml function be assembled to a function in assemly with a readable name? That will help a lot while reading the assemly code. > >> >> Mark >> > > > > -- > Jianzhou > -- Jianzhou