python - 如何启动从 Python 调用的 C++ 的 GDB?
问题描述
我需要调试从 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 解释器的源代码,因为它是开源的。
推荐阅读
- github - GitHub 操作需要从私有 GitHub 注册表恢复 NuGet 包
- reactjs - ELIFECYCLE errno 1 在使用 expo 的反应应用程序中执行 npm start 时:开发服务器崩溃
- prometheus - 带有标签提供的值(状态)的 Grafana 状态时间线面板
- html - 带有垂直资源的完整日历 - 使日边界更加突出
- github - GitHub Actions Env 中的 NPM 未安装包
- javascript - 匹配字符串中的 URL,但排除图像 url 和文档 url
- ios - 无法删除捆绑包“XXXXXXX”。删除与此捆绑包相关的所有应用程序以继续
- python - 在使用 multiplt GPU 时使用 tf.keras.metrics.AUC() 可提供大于 1 的 AUC 值
- c# - 如何每 5 分钟循环重复一次我的代码(C#)
- javascript - 如何将索引从 javascript map 函数传递到 onclick 函数?