什么时候包括调试符号



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

如果我用-g选项编译一个目标文件,那么它是否使得无论目标文件可能被内置(共享库,静态库,可执行库),输出中总是有调试符号?如果在链接时不指定-g,输出的二进制文件是否有调试符号?

  1. 每个可重定位对象文件在.symtab节中都有一个符号表,其中包含了程序中定义和引用的函数和全局变量的信息。然而,与编译器内部的符号表不同,.symtab符号表不包含局部变量的表项。
  2. -g允许使用额外的调试信息,例如行号。正如David指出的,默认行为取决于编译器和平台。
  3. 您可以参考此页了解更多详情。

一般来说,-g是一个编译器选项,因为编译器知道哪些源代码行被用来生成特定的指令。

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

最新更新