Using symbol map file with gdb?

Jan Vrany jan@vrany.io
Thu Jul 20 20:55:09 GMT 2023


Hi, 

On Thu, 2023-07-20 at 20:30 +0000, Roger Phillips via Gdb wrote:
> Greetings,
> 
> I need to debug a segfault in java native code but the callstacks have no method names. Is it possible to import a symbol map file created with, say perf map agent into gdb? If yes, how?
> 
> https://github.com/jvm-profiling-tools/perf-map-agent/tree/master

I do not think this is possible with current GDB. 

However, a year ago or so I implemented new Python API that allows one to
register new functions (symbols) at runtime. I used this for similar purpose,
to get a meaningful backtrace of Java code in GDB [1]

The code is at sourceware.org. To use perf map. you'd essentially need to parse 
the map file in Python and then call the new API to get symbols registered in 
GDB, in essence you'd need to do something like:

     # assuming that
     #  name contains Java method descriptor
     #  code is method's entry point
     #  size is method's code size
     objfile = gdb.Objfile(name)
     symtab = gdb.Symtab(objfile, "SomeJavaClass.java")
     symtab.add_block(name, code, code + size)

     # If you have line number info, you may want to
     # build a linetable and GDB would show the source
     # code...
     symtab.set_linetable([
          gdb.LineTableEntry(29, code, True),
          gdb.LineTableEntry(30, code+3, True),            
          gdb.LineTableEntry(31, code+6, True)
     ])

I plan to upstream the code, but sadly it is still not polished
enough to submit it :-(

HTH, Jan


[1]: https://github.com/janvrany/openj9-gdb/tree/master
[2]: https://sourceware.org/git/?p=binutils-gdb.git;a=shortlog;h=refs/heads/users/jv/wip/feature-py-jit-api









More information about the Gdb mailing list