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:48) |
From: | Jianzhou Zhao <jianzhou@s...> |
Subject: | Re: [Caml-list] Debugging C and OCaml |
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. > > Mark > -- Jianzhou