0

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

如果我使用 -g 选项编译目标文件,那么是否必须将任何目标文件(共享库、静态库、可执行文件)内置到其中,输出中将始终包含调试符号?如果在链接期间不指定-g,输出二进制文件是否会有调试符号?

4

2 回答 2

0

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

但是,某些链接器还要求您指定 -g,并且根据您的链接器,您可能需要指定其他开关,因为至少在 solaris 上,它不会将所有调试信息放入可执行文件中,并且调试器会发现它从 .o 文件中需要什么。

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

于 2013-06-05T09:06:02.767 回答
0
  1. 每个可重定位目标文件在.symtab节中都有一个符号表,其中包括有关在程序中定义和引用的函数和全局变量的信息。但是,与编译器内部的符号表不同,.symtab符号表不包含局部变量的条目。
  2. -g允许使用额外的调试信息,例如行号。正如大卫指出的那样,默认行为取决于编译器和平台。
  3. 您可以参考此页面了解更多详情。
于 2013-06-06T05:10:54.157 回答