为使用多种语言编译的程序公开调试符号

时间:2016-06-10 15:24:20

标签: c++ c gcc gdb m

根据官方说明,要编译具有调试支持的程序,您可以运行

g++ -std=c++11 -O0 -g -c -o program1.o program1.cpp 

现在对C程序做同样的事情,它只是:

gcc -O0 -g -c -o program2.o program2.c

为了将两种类型链接在一起,我可以使用:

g++ --std=c++11  -O0 -g -o program program.o program2.o

然后,调试:

gdb program
gdb > run <PARAMS>

在几次尝试修改编译器选项之后,它完全起作用(上述选项适用于工作版本)。在某些情况下,C符号会加载,但C ++符号不会加载。

有人可以了解推荐的选项是什么,以便为混合多种编译语言的非平凡示例启用调试?所有文档仅涉及微不足道的例子。

2 个答案:

答案 0 :(得分:1)

请注意,如果仅使用-g选项,则编译器将使用操作系统的本机格式,该格式可能会有所不同。您可以使用其他-g...种类(例如-gdwarf-3-g-stabs)明确指定格式。这使您可以保证您的目标文件都具有一致的调试格式,无论它们在何处构建。

如果您希望使用其他调试器,也可以使用此方法禁用gdb - 仅扩展。有关详细信息,请参阅this

答案 1 :(得分:0)

在每个编译和链接步骤中,将-g选项添加到编译器标志中。对于调试版本,也建议使用-O0,这样您就不会让编译器优化函数。不一致可能导致没有调试符号或部分调试符号。