我需要调试一个从Python代码调用的C++函数。
如何启动GDB(或者更好的DDD),使其能够调试从给定的Python命令行调用的C++代码?
给定的Python命令行为:
python3 -m e2e.Tests.Libs.HundredEightyOneTest
它调用我需要调试的C++代码。
我的建议是:从python解释器的源代码中重新编译它(这样它就可以使用DWARF调试信息进行编译,实际上是使用作为gcc-wall-o-g
调用的GCC)。
一旦您获得了这样的Python3
解释器(带有DWARF调试信息),可能在/usr/local/bin/python3
中,阅读Python的文档,GDB的文档并运行
gdb --args /usr/local/bin/python3 -m e2e.Tests.Libs.HundredEightyOneTest
当然,您已经用g++-wall-wextra-g
和-fpic
编译了Python嵌入的C++代码,而且您的C++函数有时可能需要extern“C”
。 请参阅C++dlopen mini howto,因为Python通常使用dlopen(3)。
可以在LinuxFromScratch上获得进一步的指导。
关于DDD的用法,请阅读其文档。 它正在运行gdb
。
您可能希望从GNU emacs运行gdb
,或者使用它的--tui
选项。
由于GDB是自由软件,您可能希望从它的源代码重新编译它,以利用最近的特性。 甚至对海湾合作委员会也是如此(出于同样的原因)。