DS_*_*don 3 c++ python debugging visual-studio
我的最终目标是调试一个 Python 脚本,该脚本调用我自己用 C++ 编写的 COM dll。在 MS Visual Studio Community 2019 中使用 Python 3.8。
我的主要问题是调试。MSVC 不断要求 Python38.dll 的调试符号,并且无法命中断点。
在我的 Python 项目的“调试属性”中,如果不选中“启用本机代码调试”,那么我的 Python 将在我设置的断点处正确运行和停止。COM dll 在断言上失败(这就是我正在尝试调试的),并且我获得了“重试调试”选项...但没有任何反应,并且我的 python 代码结束了 ( The program 'python3.8.exe' has exited with code -1 (0xffffffff).)
如果我选中“启用本机代码调试”,程序会忽略我的 Python 断点,并弹出此窗口:

如果我选择“关闭”,则 Visual Studio 开始运行 Python 脚本(不会命中任何 Python 脚本断点),会命中断言,然后选择“重试”会在有问题的行处打开我的 C++ 代码(这至少有帮助)一个点)。如果从 Excel 中的 VBA 驱动,同一个 COM dll 工作正常,所以我怀疑通过 win32com.client 传递参数有问题,所以我想检查 dll 是否正在接收我认为我正在发送的内容:因此需要调试。
您可以在其中看到我按照 MS 网站上的说明进行操作,并使用 Python 3.8 安装程序来安装符号。目录 C:\Program Files\Python38 确实包含 python38.pdb。我怀疑 Visual Studio 正在从其他地方加载 python?我是否将符号安装在错误的位置?
我希望能够单步执行我的 Python 代码(在标记处命中断点),并且在 C++ 代码中命中断点。这可能吗?如果可以,我该如何设置我的 Visual Studio 才能与 Python 3.8 完美配合?
如果有人确实费力地解决了这个问题,那么对我有用的解决方案是:
当我现在从 VS 运行 python 脚本时,我可以看到命令窗口有 C:\Program Files\Python37\python37.exe
现在,选中“启用本机代码调试”不仅会命中我的 Python 断点,还会命中我的 C++ 中的任何断点(当文件打开时)。
美中不足的是调试器花费很长时间来加载所有单独的 python 包的符号。我尝试指定我只需要 COM dll 的符号,但无济于事。我启动调试器,然后冲浪查看问答,直到一段时间后遇到第一个断点......
如果有人对此有解决办法,我很想听听。