编译过程的哪个阶段是实际生成的调试符号。
如果我用-g选项编译一个目标文件,那么无论是否可以构建任何目标文件(共享库,静态库,可执行文件)都必须输出,输出中总会有调试符号吗? 如果在链接期间没有指定-g,输出二进制文件是否会有调试符号?
答案 0 :(得分:0)
通常,-g是编译器选项,因为编译器知道正在使用哪些源代码行来生成特定指令。
但是,一些链接器要求您同时指定-g,并且根据您的链接器,您可能需要指定其他开关,因为至少在solaris上,它不会将所有调试信息都放在可执行文件中,并且调试器从.o文件中找到它所需的内容。
这一切都归结为阅读链接器文档。
答案 1 :(得分:0)
.symtab
部分都有一个符号表,其中包含有关在程序中定义和引用的函数和全局变量的信息。但是,与符号表内部编译器不同,.symtab
符号表不包含局部变量的条目。-g
可以使用额外的调试信息,例如行号。正如David指出的那样,默认行为取决于编译器和平台。