【问题标题】:How to debug a DLL in Visual Studio that I call from Python using ctypes?如何在 Visual Studio 中调试我使用 ctypes 从 Python 调用的 DLL?
【发布时间】:2019-10-01 10:12:31
【问题描述】:

我正在使用 ctypes 从 Python 调用的 Visual Studio 中编写 C++ DLL。调用函数并返回结果就可以了。但是,我还没有弄清楚如何在从 Python 调用 C++ 代码时对其进行调试。我做了一件显而易见的事情,即开始调试 Python 代码(目前使用 PyScripter,但这并不是一成不变的),然后将 VS 调试器附加到 Python 进程。我还检查了 TaskManager 中的进程 ID,以确保我附加到正确的进程。这似乎有效,即 VS 没有抱怨,C++ 代码中的断点保持完整的红点(意味着可以命中断点),并且调试菜单中的“分离...”命令处于活动状态。然而,当 Python 最终调用其中一个 C++ 函数时,not 命中了断点。该函数返回正确的结果,但执行在断点处停止。有没有人有这方面的经验,可以帮助我?谢谢!

【问题讨论】:

  • 你确定你用调试符号编译了你的dll(我认为这是你需要做的事情)?
  • 我刚刚验证过,是的,我确实生成了符号
  • 确保在附加时选择“Native”。 VS 尝试自动检测并附加为 Python 调试器,而不是在较新的版本中(我认为是从 2017 年开始)。
  • 在你想中断的地方抛出一个未处理的异常。看看这是否可行:^) 我一直在用 Python 调试 C++ DLL,你所描述的应该可以工作。特别是。如果断点解决(红点)。优化关闭了吗?有时代码在优化后不会执行预期的流程。

标签: python c++ visual-studio debugging ctypes


【解决方案1】:

mixed-mode debugging 的文档页面详细说明了它,但简短的版本是:

当你有一个项目时

打开项目属性,切换到调试选项卡,然后选择启用本机代码调试。现在,当您按下 F5 时,您将处于一种可以自然调试 Python 和 C/C++ 代码的模式。

当您附加到正在运行的进程时

在附加之前,单击选择按钮选择调试引擎。您将希望同时选择 both NativePython(默认情况下,如果在进程中检测到 Python,它将仅选择 Python)。

【讨论】:

    猜你喜欢
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    相关资源
    最近更新 更多