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

How to start GDB for C++ called from Python?

本文关键字:C++ 启动 GDB 调用 Python      更新时间:2023-10-16

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

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

给定的 Python 命令行是:

python3 -m e2e.Tests.Libs.HundredEightyOneTest

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

我的建议:从源代码重新编译你的 python 解释器(所以它被编译为 DWARF 调试信息,实际上使用 GCC 调用为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 迷你操作方法,因为 Python 通常使用 dlopen(3(。

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

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

您可能希望从 GNU emacs 运行gdb,或者使用其--tui选项。

您可能希望从其源代码重新编译最近的 GDB,因为它是自由软件,以利用最近的功能。同样,即使是海湾合作委员会(出于同样的原因(。

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