Ale*_*hno 82
建议的命令
objdump --debugging libinspected.a
objdump --debugging libinspected.so
Run Code Online (Sandbox Code Playgroud)
至少在Ubuntu/Linaro 4.5.2上给我总是相同的结果:
libinspected.a: file format elf64-x86-64
libinspected.so: file format elf64-x86-64
Run Code Online (Sandbox Code Playgroud)
无论存档/共享库是使用还是不使用-g选项构建的
真正帮助我确定是否-g使用的是readelf工具:
readelf --debug-dump=decodedline libinspected.so
Run Code Online (Sandbox Code Playgroud)
要么
readelf --debug-dump=line libinspected.so
Run Code Online (Sandbox Code Playgroud)
这将打印出包含源文件名,行号和地址的行集,如果这样的调试信息包含在库中,否则它将不打印任何内容.
您可以传递您认为必要的任何值--debug-dump而不是decodedline.
Mat*_*lan 76
如果您在Linux上运行,请使用objdump --debugging.库中的每个目标文件都应该有一个条目.对于没有调试符号的目标文件,您将看到如下内容:
objdump --debugging libvoidincr.a
In archive libvoidincr.a:
voidincr.o: file format elf64-x86-64
Run Code Online (Sandbox Code Playgroud)
如果有调试符号,输出将更加冗长.
Vel*_*kan 26
有用的是:
gdb mylib.so
Run Code Online (Sandbox Code Playgroud)
它在未找到调试符号时打印:
Reading symbols from mylib.so...(no debugging symbols found)...done.
Run Code Online (Sandbox Code Playgroud)
或者在找到时:
Reading symbols from mylib.so...done.
Run Code Online (Sandbox Code Playgroud)
以前的答案都没有为我提供有意义的结果:没有调试符号的libs提供了大量输出等.
qrd*_*rdl 25
nm -a <lib> 将打印库中的所有符号,包括调试符号.
所以,你可以比较的输出nm <lib>和nm -a <lib>-如果他们不同,你的LIB包含了一些调试符号.
gle*_*nnr 14
在OSX上你可以使用dsymutil -s和dwarfdump.
swe*_*egi 11
你可以使用objdump.
编辑:从手册页:
-W
--dwarf
Displays the contents of the DWARF debug sections in the file, if
any are present.
Run Code Online (Sandbox Code Playgroud)
建议在调试信息存储在与二进制文件分开的文件中的情况下使用objdump --debugging或readelf --debug-dump=...不起作用的答案,即二进制文件包含调试链接部分。也许人们可以将其称为readelf.
以下代码应正确处理此问题:
# Test whether debug information is available for a given binary
has_debug_info() {
readelf -S "$1" | grep -q " \(.debug_info\)\|\(.gnu_debuglink\) "
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅GDB 手册中的单独调试文件。