A lot of debugging tools are based on two ELF declarations that ocaml compiler does not handle : .file and .loc.
By enabling these two little things you can :
- set breakpoints on ocaml function with gdb in native code!
- see functions executions counts in gprof,
- generate annoted ocaml source, with, for each function details of sub functions called (with valgrind/callgrind).
I've done a blog post about all these possibilities (in french: http://blog.techno-barje.fr/post/2008/11/09/Ocaml-native-code-debugging [^])

I've already done a patch which modify all compilation chain in order to add a new fun_dbg:Debuginfo.t on all fun_decl types.
This attribute is filled in closure.ml:close_functions and then is just copied in each compilation step, with some new functions arguments in order to pass this new information.
-> patch-file-and-loc-v1-cvs-2008-11-11.patch

This is not the cleanest and best solution, but that's working for all function calls.
A better solution is to set the dbg:Debuginfo.t attribute in instruction type, and that for all instructions ... but I was really unable to do that!
Nor was I able to set this attribute just for the first instruction of all function...
But with this approach, we would be able to set breakpoint on any ocaml source code line! (instead of just function call with my current work)

Keep me in touch if you decide to get this solution or if you know any other way for adding these two declarations.

Recently, I've worked enhancing the support of GDB. The result is a serie of patches against 3.12.1 (including some patches from ygrek and Till). If there is an interest, I can pass some time to port them to trunk: