我需要调试从 Python 代码调用的 C++ 函数。
如何以调试从给定 Python 命令行调用的 C++ 代码的方式启动 GDB(或更好的 DDD)?
给定的 Python 命令行是:
python3 -m e2e.Tests.Libs.HundredEightyOneTest
它调用了我需要调试的 C++ 代码。
我需要调试从 Python 代码调用的 C++ 函数。
如何以调试从给定 Python 命令行调用的 C++ 代码的方式启动 GDB(或更好的 DDD)?
给定的 Python 命令行是:
python3 -m e2e.Tests.Libs.HundredEightyOneTest
它调用了我需要调试的 C++ 代码。
我的建议:从源代码重新编译您的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
。
您可能希望gdb
从GNU emacs或使用它的--tui
选项运行。
您可能希望从源代码重新编译最近的GDB,因为它是免费软件,以利用最近的功能。甚至对于GCC也是如此(出于相同的原因)。
您可以浏览一下 Python 解释器的源代码,因为它是开源的。