繁体   English   中英

从 Python (ctypes) 调试 C 库

[英]Debug C-library from Python (ctypes)

我有一个使用 ctypes 和 C 共享库(dll 文件)的 Python 程序。 作为 IDE,我使用 Eclipse,其中将开发两个项目(C 共享库和使用它的 Python 程序)。

我的想法是:当我在调试模式下启动 Python 程序时,我能否以某种方式调试用 C 编写的共享库? 含义:我可以设置断点,当 Python 程序到达共享库中的断点时,执行停止并且我可以更改变量值等吗?

实际上,在 Eclipse 中使用 CDT 和 PyDev 环境是一件相当简单的事情。

我在这里假设您已经正确配置了项目,因此您可以单独构建和调试每个项目。

基本上,您只需要在 Debug 模式下启动 Python 项目,然后将 CDT 调试器附加到正在运行的 Python 进程。 为了方便起见,我将尝试逐步描述它:

  1. 在调试模式下运行您的 Python 项目。 在使用 ctypes 加载 dll 后在某处放置一个断点。 记下创建的 python 进程的 pid(您应该在控制台视图中看到第一行说明 pid。类似于: pydev debugger: starting (pid: 1234)

  2. 为您的 CDT 项目创建调试配置,选择类型“C/C++ 附加到应用程序”。 您可以使用默认配置。

  3. 使用您创建的配置调试您的项目。 应该会出现一个窗口,询问您要附加到哪个进程。 选择具有正确 pid 的 python 进程。

  4. 您现在可以向 C 代码添加断点。

在调试透视图中,您将有两个调试器,就好像它们是两个不同的进程一样。 当您使用 python 调试器时,您应该始终确保 C/C++ 调试会话正在运行 - 只要 C/C++ 调试会话被挂起,python 调试器就会无响应。

据我所知,不在日食中。

但是,用于 Visual Studio 的 Python 工具具有此功能:

https://pytools.codeplex.com/wikipage?title=Mixed-mode%20debugging

也可以免费获得。 在 Microsoft 网站上,您需要(以及 Windows 的副本)

1) Visual Studio(付费 Pro+ 版本或免费 Express 版本(从 2.1Beta 开始))

2) PTVS 扩展(这提供了 VS Python 支持)

3) Python 解释器和 Python 库(这些与 PTVS 捆绑在一起)

这意味着您可以并排调试 python 和 c。 调试器会捕获对用 c 编写的库的调用,前提是它们是由 Visual Studio 使用符号编译的。

请注意,本机 Python 的混合模式调试功能往往较少,但它仍然能够使用常规本机调试器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM