Tag: debug symbols

gcc为全局变量生成不必要的调试符号?

在我们的项目中,我们从gcc 5.3移到gcc 7.3,并发现调试符号增加了很多; 经过一番挖掘,我发现gcc 7.3生成不必要的(我想,请纠正我,如果我错了)调试全局变量的符号,因为我们声明了很多全局变量并且很多c文件都包含它们,调试符号大小为最终的ELF筹集到巨大的价值。 是否有一个gcc开关来解决这个问题而不改变全局变量的使用? 编辑1 “-O3” or “-Os”, “-feliminate-unused-debug-types” does not help. 下面是一个显示问题的示例(在ubuntu 18.04上,使用gcc 5.5和gcc 7.3):示例代码: ### test.c #include “global.h” int main() { return 0; } ###global.c #include “global.h” int __my_unused = 1; ###global.h extern int __my_unused; GCC 5.5,test.c中没有不必要的调试符号“__my_unused” root@b-test:/tmp# gcc-5 -g -O2 test.c global.c root@b-test:/tmp# readelf -wi a.out Contents of the .debug_info […]

如何知道ELF目标文件中的调试信息类型?

我有一个ELF目标文件。 我想知道它包含哪种类型的调试信息。 它是用PPC架构的Diab编译器(C源代码)编译的。 我很确定它是用调试符号构建的。 我尝试用dwarfdump提取调试信息,但我不工作,所以我猜调试信息不​​是DWARF类型。 $ dwarfdump file.elf No DWARF information present in file.elf 使用objdump显示调试信息是空的。 $ objdump -g file.elf file.elf: file format elf32-powerpc 即使ELF文件包含名为.debug_sfnames , .debug_srcinfo和.debug.srcinfo部分,这个ELF文件也不包含调试信息吗? 或者调试信息是以objdump无法处理的格式存储的?