我正在研究编译器,突然感到好奇,如果我使用-g选项编译程序(比如test.c),是否创建了带有符号表的实际文件并将其存储在某个地方,或者只是将其保存结合可执行文件?
我是一个全新的人,所以我真的在学习基础知识,可能对你们中的一些人来说是个愚蠢的问题..对不起,请告诉我!
谢谢!
答案 0 :(得分:6)
ELF目标文件格式(这是gcc在许多常见平台上生成的格式)是一种容器格式,可以包含许多不同类型的信息。它始终包含一个外部链接符号的符号表(从库中定义或需要)。另外,如果指定了-g
,则ELF文件将包含仅调试器使用的大量信息,包括所有使用的本地符号。
您可以使用objdump --debugging
或readelf --debug-dump
以易于理解的格式查看调试信息。祝你好运!
调试信息中通常不包含的一件事是实际的源代码。您将找到源文件的名称和与已编译代码的不同块相对应的行号。调试器读取源代码文件以报告源代码行。如果自从可执行文件被编译以来就已经编辑了源代码文件,则将无法按预期工作。