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

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

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

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

给定的Python命令行是:

python3 -m e2e.Tests.Libs.HundredEightyOneTest

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

我的建议:重新编译你的 python interpreter from its source code (so it gets compiled with DWARF debug information, practically speaking with GCC invoked as gcc -Wall -O -g).

一旦你获得这样的 python3 解释器(带有 DWARF 调试信息),也许在 /usr/local/bin/python3 中,阅读 documentation of Python, the documentation of GDB 和 运行

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

当然你已经编译了你的C++代码embedded by Python with e.g. g++ -Wall -Wextra -g and probably -fPIC and your C++ functions might sometimes need extern "C". See C++ dlopen mini howto since Python usually uses dlopen(3)

LinuxFromScratch 上可能会提供更多指导。

关于 DDD 的用法,请阅读其文档。是运行宁gdb.

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

您可能想要重新编译最近的 GDB from its source code, since it is free software, to take advantage of recent features. And likewise even for GCC(出于同样的原因)。

您可以浏览 Python 解释器的源代码,因为它是 open source.