I have some compiled libraries on x86 Linux and I want to quickly determine whether they were compiled with debugging symbols.
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.
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.
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.
On OSX you can use dsymutil -s
and dwarfdump
.
Using dsymutil -s <lib_file> | more
dsymutil -s <lib_file> | more
you will see source file paths in files that have debug symbols, but only the function names otherwise.
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.
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, ie 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.
The command readelf -wi file is a good verification of debuginfo, compiled within your program.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.