【问题标题】:Eclipse: debug shared library loaded from pythonEclipse:调试从 python 加载的共享库
【发布时间】:2011-11-29 07:51:02
【问题描述】:

在 Linux 中,我正在尝试调试从 Python 代码加载的共享库的 C++ 代码。使用ctypes 包完成加载。在 Eclipse 中,我在 Python 和 C++ 代码中都设置了断点,但是 Eclipse 只是跳过了 C++ 代码中的断点(Python 代码中的断点可以正常工作)。

我尝试在 Eclipse 中使用attach to application(在调试配置下)并选择 Python 进程,但它没有改变任何东西。在attach to application 对话框中,我选择共享库作为项目,我选择/usr/bin/python2.6 作为C/C++ application。这是正确的方法吗?

在运行 python 代码之前,以及在 Python 代码中的断点被捕获之后,就在调用共享库函数的行之前,我都尝试过。

编辑

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

【问题讨论】:

  • 库是用调试信息构建的吗?
  • 是的,当从 c++ 可执行文件加载库时,我可以毫无问题地调试库。
  • 第二个想法,如何验证python代码是否加载了调试版本?
  • 如果未找到调试信息,GDB 应发出警告(Reading symbols from <library>...(no debugging symbols found)...done.Reading symbols from <library>...done.)。我不熟悉 Eclipse;希望你有办法读取原始 GDB 输出。
  • 尝试在c++代码中使用_asm("int $3")

标签: python debugging gdb shared-libraries eclipse-cdt


【解决方案1】:

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

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

步骤如下:

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

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

希望对您有所帮助。

【讨论】:

  • 我能够使用与 MingW 类似的过程调试 python+c++ 共享库项目。有两个区别: 1. 我必须选择“Legacy Attach to Process Launcher”。 2. C/C++ Applications字段不能为空,而是python可执行文件。
猜你喜欢
  • 2011-03-22
  • 2012-11-18
  • 2013-05-25
  • 2013-11-22
  • 1970-01-01
  • 2011-08-02
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多