在GDB中调试生成的代码时显示原始源代码 我编写了一个编译到C++的编程语言,希望用GDB调试。调试程序时,我(当然)会看到生成的代码。有没有一种方法可以让hav GDB显示生成代码的源文件

在GDB中调试生成的代码时显示原始源代码 我编写了一个编译到C++的编程语言,希望用GDB调试。调试程序时,我(当然)会看到生成的代码。有没有一种方法可以让hav GDB显示生成代码的源文件,c++,gdb,C++,Gdb,有没有一种方法可以让hav GDB显示生成代码的源文件 当然:您必须将#line指令发送到生成的C++,并且您需要将已经预处理过的源代码(很可能已经这样做)生成到.ii文件中。将.ii文件送入g++将禁止预处理,g++将遵守它找到的任何#行指令,并发出适当的源位置调试信息 我自己从来没有做过这么极端的事情,但是你可以利用GDB漂亮的打印机,编写一些groovy python脚本来进行映射。至少不是没有一个巨大的努力,这可能包括扩展调试信息和自定义gdb..使用g++你应该能够做-g来获得调试符号

有没有一种方法可以让hav GDB显示生成代码的源文件


当然:您必须将
#line
指令发送到生成的
C++
,并且您需要将已经预处理过的源代码(很可能已经这样做)生成到
.ii
文件中。将
.ii
文件送入
g++
将禁止预处理,
g++
将遵守它找到的任何
#行
指令,并发出适当的源位置调试信息

我自己从来没有做过这么极端的事情,但是你可以利用GDB漂亮的打印机,编写一些groovy python脚本来进行映射。至少不是没有一个巨大的努力,这可能包括扩展调试信息和自定义gdb..使用g++你应该能够做-g来获得调试符号。太棒了!但是,用
.ii
文件代替
.cpp
文件有什么意义?我在一个小例子中测试了你所说的,而
gdb
似乎可以处理带有
#line
指令的常规
.cpp
文件;我甚至可以在原始源代码中设置断点。在何种情况下,您需要GCC特定的
.ii
文件,而不仅仅是带有
#行
指令的
.cpp
文件?我的意思是,您可以使用
g++
-E
标志将
.cpp
文件转换为
.ii
文件,但在这一点上,为什么不使用
.cpp
文件呢?