如何为从 Python 调用C++启动 GDB?
How to start GDB for C++ called from Python?
我需要调试一个从 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解释器的源代码,因为它是开源的。
相关文章:
- 如何创建一个空的全局类并在启动时实例化它
- 即使我读取了所有内容,在FIFO上打开的QSocketNotifier也会一直启动
- 使用 std::string () const 函数启动线程或未来
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- 如何创建线程序列以按照启动顺序执行任务?
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- 在挂钩启动新线程时解除挂钩进程
- 程序无法启动,因为缺少 libmpc-3.dll
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- QSerialPort 在应用程序启动之前正在使用中
- 无法在 Arch Linux 中启动虚幻引擎 4
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 如何使用 ctypes 停止和重新启动从 Python 运行的C++代码
- 程序在使用 system() 启动另一个可执行文件时停止
- Qt 和 Android - 如何使用 Qandroidjniobject 启动相机
- Q没有管理权限的 exe 无法启动维护工具
- 启动类函数作为失去引用的线程
- 如何使用C++确定应用程序是否已在窗口中启动?
- 在没有管理员权限的情况下,在 c++ 中以编程方式将程序添加到启动