[LLVMdev] Connecting JITted code to gdb

Chris Lattner clattner at apple.com
Wed Apr 1 12:56:08 PDT 2009

On Mar 31, 2009, at 12:33 PM, Jeffrey Yasskin wrote:
> There appear to be two techniques in common use to debug
> dynamically-generated code despite this. First, as Evan suggests
> below, we can have the JIT print the address range that it's written a
> function into, have gdb disassemble that, set breakpoints at
> particular addresses, and print variables by knowing what register
> they live in. Second, as described at
> http://www.mono-project.com/Debugging#Debugging_with_GDB_in_XDEBUG_mode 
> ,
> we can write out a full object file with dwarf tables, and use
> add-symbol-file to get gdb to load that on demand.

Hi Jeffrey,

Adding support for this would be a great thing, and is somewhere on my  
long-term todo list (which is probably farther out than you'd like  
it ;-).

Note that the LLVM JIT does have hooks to build a runtime symbol table  
for generated code, see the ENABLE_JIT_SYMBOL_TABLE ifdef in  
JITEmitter.cpp.  This is used for performance tools that want to  
dynamically sample code that may or may not be generated by the JIT  
and need a way to attribute it back to the LLVM function name.  My  
intention is for the simple data structure that is built by this  
(which hangs off the public symbol "__jitSymbolTable") to eventually  
include a pointer to GDB data.  It would be really nice someday if GDB  
could walk this structure to find its debug symbols.


More information about the llvm-dev mailing list