I have some compiled libraries on x86 Linux and I want to quickly determine whether they were compiled with debugging symbols.
If you're running on Linux, use objdump --debugging
. There should be an entry for each object file in the library. For object files without debugging symbols, you'll see something like:
objdump --debugging libvoidincr.a
In archive libvoidincr.a:
voidincr.o: file format elf64-x86-64
If there are debugging symbols, the output will be much more verbose.
objdump -g
gives me nothing for a simple test.o compiled both with and without g
, making it effectively useless. Ubuntu 12.04, gcc 4.6.3, GNU objdump 2.22. nm -a
seems to be more useful. –
Belfry objdump -W
does the job –
Drinking nm -a
looks more reliable. –
Whitehurst The suggested command
objdump --debugging libinspected.a
objdump --debugging libinspected.so
gives me always the same result at least on Ubuntu/Linaro 4.5.2:
libinspected.a: file format elf64-x86-64
libinspected.so: file format elf64-x86-64
no matter whether the archive/shared library was built with or without -g
option
What really helped me to determine whether -g
was used is readelf tool:
readelf --debug-dump=decodedline libinspected.so
or
readelf --debug-dump=line libinspected.so
This will print out set of lines consisting of source filename, line number and address if such debug info is included into library, otherwise it'll print nothing.
You may pass whatever value you'll find necessary for --debug-dump
option instead of decodedline
.
If you're running on Linux, use objdump --debugging
. There should be an entry for each object file in the library. For object files without debugging symbols, you'll see something like:
objdump --debugging libvoidincr.a
In archive libvoidincr.a:
voidincr.o: file format elf64-x86-64
If there are debugging symbols, the output will be much more verbose.
obdjump -W lib
and readelf -w lib
. The latter one is more configurable - see readelf(1) manpage. –
We objdump -g
gives me nothing for a simple test.o compiled both with and without g
, making it effectively useless. Ubuntu 12.04, gcc 4.6.3, GNU objdump 2.22. nm -a
seems to be more useful. –
Belfry objdump -W
does the job –
Drinking nm -a
looks more reliable. –
Whitehurst What helped is:
gdb mylib.so
It prints when debug symbols are not found:
Reading symbols from mylib.so...(no debugging symbols found)...done.
Or when found:
Reading symbols from mylib.so...done.
None of earlier answers were giving meaningful results for me: libs without debug symbols were giving lots of output, etc.
nm -a <lib>
will print all symbols from library, including debug ones.
So you can compare the outputs of nm <lib>
and nm -a <lib>
- if they differ, your lib contains some debug symbols.
nm -a
has alias nm --debug-syms
which is self-explanatory :-). –
Whitehurst diff <(nm <lib>) <(nm -a <lib>)
to get an easy diff –
Ashkhabad On OSX you can use dsymutil -s
and dwarfdump
.
Using dsymutil -s <lib_file> | more
you will see source file paths in files that have debug symbols, but only the function names otherwise.
dsymutil -s
? Does the existence of output mean that it was built with debug symbols, or should it be grepped? –
Hippel You can use objdump for this.
EDIT: From the man-page:
-W
--dwarf
Displays the contents of the DWARF debug sections in the file, if
any are present.
objdump
: error: unknown argument '--dwarf'
–
Benz Answers suggesting the use of objdump --debugging
or readelf --debug-dump=...
don't work in the case that debug information is stored in a file separate from the binary, i.e. the binary contains a debug link section. Perhaps one could call that a bug in readelf
.
The following code should handle this correctly:
# Test whether debug information is available for a given binary
has_debug_info() {
readelf -S "$1" | grep -q " \(.debug_info\)\|\(.gnu_debuglink\) "
}
See Separate Debug Files in the GDB manual for more information.
readelf -S example | grep debug
would be better. To find link file using readelf --debug-dump=links example | grep link
(GNU readelf version 2.31.1-13.fc29) –
Furey The command readelf -wi file is a good verification of debuginfo, compiled within your program.
© 2022 - 2024 — McMap. All rights reserved.
obdjump -W lib
andreadelf -w lib
. The latter one is more configurable - see readelf(1) manpage. – We