【发布时间】:2020-04-28 21:14:52
【问题描述】:
我最近一直在使用 pybind11,现在我掌握了它的窍门,我对它很兴奋。这是一部很棒的作品。执行 pybind11 的工具难题的最后一部分是调试部分。我已经使用以下指南对 lldb 进行命令行调试:
我花了一些时间尝试使用 Visual Studio Code 进行调试,但收效甚微。第一个问题是,为了设置 attach 配置,您需要指定 python 可执行文件(而不是进程 ID)。如果您有多个活动的 python 进程,我不知道这应该如何工作,这种情况经常发生。
抛开这些,我设置了一个 launch 配置来指向 ipython 可执行文件,这是最方便使用的东西。当我尝试开始调试时,我得到了这个:
谁能解释一下?
如果我将可执行文件更改为纯 Python,我会在调试控制台中得到这个:
Could not initialize Python interpreter - only native expressions will be available.
Launching: /Users/andy/anaconda3/envs/SciPy37/bin/python
但是如果进入终端窗口,我可以成功输入 Python 表达式,并触发代码中设置的断点。万岁!但是还有一个问题。当我的一个扩展需要加载另一个dylib时,它找不到它。
>>> import block_test
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: dlopen(/Users/andy/Dropbox (Personal)/Developer/AudioDev/GenericDSP/Common/SciPy/BlockTest/build/block_test.cpython-37m-darwin.so, 2): Symbol not found: _vDSP_vsmul
Referenced from: /Users/andy/Dropbox (Personal)/Developer/AudioDev/GenericDSP/Common/SciPy/BlockTest/build/block_test.cpython-37m-darwin.so
Expected in: flat namespace
in /Users/andy/Dropbox (Personal)/Developer/AudioDev/GenericDSP/Common/SciPy/BlockTest/build/block_test.cpython-37m-darwin.so
这是有道理的,因为_vDSP_vsmul 是Apple DSP 加速库的一部分。但是我没有得到的是,当我使用本文开头提到的命令行调试技术时,我没有这个问题。显然这与如何找到 dylib 有某种关系,但是为什么这与命令行的情况不同呢?
在这些问题上的任何帮助都会很棒。让这些调试工具在 Visual Studio Code 中工作是 Python 和 C++ 之间绝对惊人的互操作性所缺少的部分
【问题讨论】:
-
原来依赖库的第三个问题不是 VSC 问题。 Python 命令行也有同样的问题。 ipython 没有,不知道为什么。该问题已通过明确链接到 Accelerate 库来解决。但是 ipython 的谜团和关于缺少架构的错误消息仍然存在。
-
虽然我还没有弄清楚如何无缝 VSC 调试 Visual Studio Code 和 ipython,但我确实找到了使用 Xcode 的简单方法。如果您使用的是 cmake,则可以使用它来生成 xcode 项目。然后就可以启动iPython,在Activity monitor中找到pid,通过pid附加到进程中进行调试。效果很好。
标签: c++ debugging visual-studio-code pybind11 python-extensions