Я недавно использовал pybind11, и теперь, когда я освоился с этим, я в восторге от него. Это потрясающая работа. Последняя часть головоломки для работы с pybind11 - это отладочная часть. У меня есть отладка командной строки с lldb, работающей с использованием следующего руководства:
Отладка pybind11 с lldb
Я потратил некоторое время, пытаясь отладить работу с Visual Студийный код, с ограниченным успехом. Первая проблема заключается в том, что для настройки конфигурации attach необходимо указать исполняемый файл python (а не идентификатор процесса). Я не знаю, как это должно работать, если у вас есть более одного активного python процесса, что часто происходит.
Откладывая это, я настроил конфигурацию launch для укажите на исполняемый файл i python, который является наиболее удобным для использования. Когда я пытаюсь начать отладку, я получаю следующее:
Может кто-нибудь объяснить это?
Если я изменю исполняемый файл на обычный Python, я получаю это в консоли отладки:
Could not initialize Python interpreter - only native expressions will be available.
Launching: /Users/andy/anaconda3/envs/SciPy37/bin/python
Но если go в окне терминала, я могу успешно ввести 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 - недостающий элемент абсолютно удивительной совместимости между Python и C ++