最近我一直在使用pybind11,现在我已经开始熟悉它了,对它感到非常兴奋。这是一个很棒的工具。做pybind11的最后一块拼图是调试部分。我遵循下面的指南,用lldb实现了命令行调试:
我花了一些时间尝试在Visual Studio Code中实现debug功能,但成果有限。首先问题是,为了设置附加配置,您需要指定Python可执行文件(而不是进程ID),如果有多个活动Python进程,则我不知道该怎么做。
抛开这点,我设置了一个启动配置,指向ipython可执行文件,这是最方便使用的。当我尝试启动调试时,出现了以下情况:
有人能解释一下吗?
如果我将可执行文件更改为普通Python,则在Debug Console中会得到以下结果:
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是苹果DSP加速库的一部分。但我不明白的是,当我使用本帖开头提到的命令行调试技术时,就没有这个问题。显然,这与dylibs的查找方式有关,但为什么会与命令行情况不同呢?
对于这些问题的任何帮助都将非常有用。让Visual Studio Code中的调试工具运行起来是实现Python和C++之间绝妙互操作性缺失的关键。