从 PyCharm 调试到 Visual Studio C++ 代码

Posted

技术标签:

【中文标题】从 PyCharm 调试到 Visual Studio C++ 代码【英文标题】:Debugging from PyCharm to Visual Studio C++ code 【发布时间】:2016-07-22 22:23:10 【问题描述】:

我目前正在尝试在Caffe for WindowsPyCaffe 中调试问题。

由于bug in Python Tools for Visual Studio,PTVS 不起作用,因此我使用 PyCharm 并尝试通过 Visual Studio 2013 附加到 PyCaffe 的进程。也就是说,我在设置断点的 Python 脚本上运行 PyCharm 调试器在我将 Python 入口点称为 PyCaffe 的地方。

我在 PyCharm 中调试 Python 脚本,该脚本调用 VS 中用 C++ 编写的模块。我想用 C++ 调试这些模块。所以我正在尝试使用 VS 中设置的断点附加到 PyCharm 或 Python 进程。

问题是断点没有在 Visual Studio C++ 代码中 PyCaffe 的入口点触发。

有没有人成功地让这种事情发挥作用,或者有没有其他方法可以做到这一点?

【问题讨论】:

Pycharm 是一个 IDE,你是如何通过 VS 2013 附加的?这听起来令人困惑。你是在调试 c++ 代码还是 python 代码?真的不清楚。 @limbo 我在 PyCharm 中调试 Python 脚本,它调用 VS 中用 C++ 编写的模块。我想用 C++ 调试这些模块。 【参考方案1】:

几年前我遇到了类似的问题,试图 调试用户模式驱动程序希望从 RPC 自动加载,我找到的解决方案是:

    下载 Windows 调试工具(取决于您的系统 x86 或 x64),wish 是免费的,从 Microsoft 下载。 在 C 代码中希望断点生效的位置添加“__asm int 3”(这是硬件断点的 asm 指令)。 编译C程序,正常使用调试信息(这部分很重要,因为帮助调试器找到源文件),这应该不会有任何问题。 将调试器附加到正在运行的进程(在我的情况下是资源管理器进程),在您的情况下应该是第一次调用库的进程,例如,如果 PyCharm 为新的 python 代码创建一个进程,则调试器需要附加到该进程(您可以通过在python中设置断点来管理它,希望会给您时间来执行附加过程),我想弄清楚这一点的简单方法是让进程崩溃,因为“__asm int 3" 如果没有附加调试器会导致进程崩溃,您可以利用这个等待崩溃,当 Windows 向您显示屏幕“进程 ... 检测到需要关闭的问题”时,您知道谁是您正在寻找的过程。

第一次可能会很痛苦,但对我来说非常有效,因为你 可以看到从一个程序到另一个程序的数据流,

【讨论】:

【参考方案2】:

我们附加到一个进程并允许在尚未从 VS 调试器启动的代码中设置断点。但是一个重要的问题是我们经常在VS中调试/运行应用程序,例如,我们调试在IIS下运行的Web代码,我们会附加到IIS进程或其他。

您的项目与上面的示例不同,您在 Pycharm(而不是 VS)中运行/调试您的应用程序,但您想使用 VS Attach to process 功能,所以它会有一个限制。如您所说,您在 PyCharm 中调试脚本,并希望调用 C++,因此您将检查 PyCharm 是否支持类似于 VS 中的附加工具的功能。

【讨论】:

以上是关于从 PyCharm 调试到 Visual Studio C++ 代码的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 上构建/调试(完整)LibTorch 源?

使用Pycharm代替Visual Studio继续项目

C++ 从命令行附加 Visual Studio 调试器

Visual Studio重建项目在从调试中切换到释放和反之亦然时,选择选项XML文档时

如何从 Visual Studio 调试输出窗口中读取文本

无法从 Visual Studio 2017 调试和发布 Azure 函数