提问者:小点点

如何启动从Python调用的GDB for C++?


我需要调试一个从Python代码调用的C++函数。

如何启动GDB(或者更好的DDD),使其能够调试从给定的Python命令行调用的C++代码?

给定的Python命令行为:

python3 -m e2e.Tests.Libs.HundredEightyOneTest

它调用我需要调试的C++代码。


共1个答案

匿名用户

我的建议是:从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是自由软件,您可能希望从它的源代码重新编译它,以利用最近的特性。 甚至对海湾合作委员会也是如此(出于同样的原因)。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(启动|python|调用|gdb|c++)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?