Недавно я использовал pybind11, и теперь, когда я освоился с ним, я в восторге от него. Это потрясающая работа. Последняя часть инструментальной головоломки для выполнения pybind11 — это часть отладки. У меня есть отладка командной строки с работой lldb, используя следующее руководство:
Отладка pybind11 с помощью lldb
Я потратил некоторое время, пытаясь отладить работу с кодом Visual Studio, но с ограниченным успехом. Первая проблема заключается в том, что для настройки конфигурации attach необходимо указать исполняемый файл Python (а не идентификатор процесса). Я не знаю, как это должно работать, если у вас более одного активного процесса 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++.