在 Linux 中,我正在尝试调试从 Python 代码加载的共享库的 C++ 代码。加载是使用 ctypes
包完成的。在 Eclipse 中,我在 Python 和 C++ 代码中都设置了断点,但是 Eclipse 只是跳过了 C++ 代码中的断点(Python 代码中的断点工作正常)。
我尝试在 Eclipse 中使用 attach to application
(在 Debug Configurations 下)并选择 Python 进程,但它没有改变任何东西。在 attach to application
对话框中,我选择共享库作为项目,并选择 /usr/bin/python2.6
作为 C/C++ 应用程序
。这是正确的方法吗?
我在运行 python 代码之前以及在捕获 Python 代码中的断点之后,就在调用共享库函数的行之前都尝试过。
编辑
与此同时,我正在使用一种变通方法,即通过附加到 python 进程来调用 python 代码并使用 gdb 命令行 session 进行调试。但我想听听在 Eclipse 中执行此操作的解决方案。
最佳答案
我已经能够在Eclipse中成功调试python加载的c++共享库。
先决条件: 一个eclipse工作空间中的两个eclipse项目:一个是C++项目,从中生成c++共享库,另一个是python项目(PyDev),加载生成的c++共享库。
步骤是:
- 使用相应的 python 环境和参数创建名为 PythonDebug 的“Python Run”调试配置
- 创建名为 CppDebug 的“C/C++ 附加到应用程序”调试配置。 project 字段为 C++ 项目,将 C/C++ Application 字段留空
- 在已加载 C++ 共享库后的 Python 代码中设置断点
- 启动调试 session PythonDebug,程序将在第3步创建的断点处中断
- 启动调试 session CppDebug,会弹出一个菜单,选择正确pid的python进程(会有3个pid,正确的可以在PythonDebug session 中找到)
- 在你希望程序中断的c++源代码中设置一个断点
- 继续 PythonDebug session
- 继续 CppDebug session
- 程序将在 c++ 断点处中断
我用 Eclipse Mars 版本测试了上面的过程。
希望对您有所帮助。
关于python - eclipse : debug shared library loaded from python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307425/