Eclipse:调试从python加载的共享库

时间:2011-11-29 07:51:03

标签: 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++ application。这是正确的方法吗?

我在运行python代码之前尝试了这一点,并在捕获了Python代码中的断点之后,就在调用共享库函数的行之前。

修改

与此同时,我正在使用一种解决方法,通过附加到python进程来调用python代码并使用gdb命令行会话进行调试。但我想听听Eclipse内部的解决方案。

1 个答案:

答案 0 :(得分:1)

我已经能够成功调试Eclipse中由python加载的c ++共享库。

先决条件: eclipse工作区中的两个eclipse项目:一个是C ++项目,从中生成c ++共享库,另一个是python项目(PyDev),它加载生成的c ++共享库。

步骤如下:

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

    希望它有所帮助。