python - eclipse : debug shared library loaded from python

标签 python debugging gdb shared-libraries eclipse-cdt

在 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++共享库。

步骤是:

  1. 使用相应的 python 环境和参数创建名为 PythonDebug 的“Python Run”调试配置
  2. 创建名为 CppDebug 的“C/C++ 附加到应用程序”调试配置。 project 字段为 C++ 项目,将 C/C++ Application 字段留空
  3. 在已加载 C++ 共享库后的 Python 代码中设置断点
  4. 启动调试 session PythonDebug,程序将在第3步创建的断点处中断
  5. 启动调试 session CppDebug,会弹出一个菜单,选择正确pid的python进程(会有3个pid,正确的可以在PythonDebug session 中找到)
  6. 在你希望程序中断的c++源代码中设置一个断点
  7. 继续 PythonDebug session
  8. 继续 CppDebug session
  9. 程序将在 c++ 断点处中断

我用 Eclipse Mars 版本测试了上面的过程。

希望对您有所帮助。

关于python - eclipse : debug shared library loaded from python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307425/

相关文章:

java - Eclipse调试执行Java程序而不在断点处停止

c - GDB 未使用的变量

Python-数据帧 : Multiply multiple columns by another column and save in new columns

Python 两个整数循环,+1 到 A 直到 A=​​B

python - Pandas reshape 从 colname 中提取多个值

c++ - 在 C++ 中调试 sigtrap

python - 多个Python类继承

eclipse - 在 Eclipse 中运行和调试 Node 项目

c++ - 如何判断函数是否可重入

python-gdb 错误 : Python Exception <class 'RuntimeError' > Type does not have a target