如何为从 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.
我需要调试从 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.