何时包含调试符号

时间:2013-06-05 09:00:05

标签: c debugging compiler-construction

编译过程的哪个阶段是实际生成的调试符号。

如果我用-g选项编译一个目标文件,那么无论是否可以构建任何目标文件(共享库,静态库,可执行文件)都必须输出,输出中总会有调试符号吗? 如果在链接期间没有指定-g,输出二进制文件是否会有调试符号?

2 个答案:

答案 0 :(得分:0)

通常,-g是编译器选项,因为编译器知道正在使用哪些源代码行来生成特定指令。

但是,一些链接器要求您同时指定-g,并且根据您的链接器,您可能需要指定其他开关,因为至少在solaris上,它不会将所有调试信息都放在可执行文件中,并且调试器从.o文件中找到它所需的内容。

这一切都归结为阅读链接器文档。

答案 1 :(得分:0)

  1. 每个可重定位目标文件在.symtab部分都有一个符号表,其中包含有关在程序中定义和引用的函数和全局变量的信息。但是,与符号表内部编译器不同,.symtab符号表不包含局部变量的条目。
  2. -g可以使用额外的调试信息,例如行号。正如David指出的那样,默认行为取决于编译器和平台。
  3. 您可以参考this page了解更多详情。