1

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

如何以调试从给定 Python 命令行调用的 C++ 代码的方式启动 GDB(或更好的 DDD)?

给定的 Python 命令行是:

python3 -m e2e.Tests.Libs.HundredEightyOneTest

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

4

1 回答 1

2

我的建议:从源代码重新编译您的python解释器(因此它使用DWARF调试信息进行编译,实际上使用GCC调用as gcc -Wall -O -g)。

一旦你得到这样的python3解释器(带有 DWARF 调试信息),也许在/usr/local/bin/python3,阅读Python的文档,GDB的文档并运行

gdb --args /usr/local/bin/python3 -m e2e.Tests.Libs.HundredEightyOneTest

当然,您已经编译了由 Python 嵌入的C++ 代码,例如g++ -Wall -Wextra -g-fPIC并且您的 C++ 函数有时可能需要extern "C". 请参阅C++ dlopen mini howto,因为 Python 通常使用dlopen(3)

LinuxFromScratch上可能提供了进一步的指导。

关于DDD的使用,请阅读其文档。它正在运行gdb

您可能希望gdbGNU emacs或使用它的--tui选项运行。

您可能希望从源代码重新编译最近的GDB,因为它是免费软件,以利用最近的功能。甚至对于GCC也是如此(出于相同的原因)。

您可以浏览一下 Python 解释器的源代码,因为它是开源的。

于 2020-06-11T13:46:05.820 回答