How to know the name and/or path of the debug symbol file which is linked to a binary executable?
Asked Answered
G

1

13

How to know the name and/or path of the debug symbol file which is linked to a binary executable?

Suppose you did like this:

objcopy --only-keep-debug foo foo.dbg
objcopy --strip-debug foo
objcopy --add-gnu-debuglink=foo.dbg foo

Now foo.dbg has debug symbols, foo only has the link to foo.dbg that gdb can use. Since gdb can know the symbol file from foo, how can we know same without actually running gdb?

I have observed that even if I rename the executable from foo to xyz still gdb loads symbols from foo.dbg so it is not like binaryname.extension, and extension is optional anyway.

Garnish answered 12/3, 2017 at 16:43 Comment(0)
T
16

how can we know same without actually running gdb?

Either of these commands will tell you:

readelf -x.gnu_debuglink foo
objdump -sj.gnu_debuglink foo

The objcopy --add-gnu-debuglink simply adds .gnu_debuglink section containing the given path, and a checksum of the debug file.

More info here.

Tejeda answered 12/3, 2017 at 18:14 Comment(2)
Could you please tell me what checksum technique is used I mean MD5 or SHA what, so that I can compare and be sure that I have correct debug info file.Garnish
@Garnish It's CRC32. Documentation here: sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.htmlTejeda

© 2022 - 2024 — McMap. All rights reserved.