在GDB中调试生成的代码时显示原始源代码 我编写了一个编译到C++的编程语言,希望用GDB调试。调试程序时,我(当然)会看到生成的代码。有没有一种方法可以让hav 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来获得调试符号
当然:您必须将
#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
文件呢?