Отладка расширения Pybind11 с помощью кода Visual Studio (MacOS) - PullRequest
0 голосов
/ 29 апреля 2020

Я недавно использовал pybind11, и теперь, когда я освоился с этим, я в восторге от него. Это потрясающая работа. Последняя часть головоломки для работы с pybind11 - это отладочная часть. У меня есть отладка командной строки с lldb, работающей с использованием следующего руководства:

Отладка pybind11 с lldb

Я потратил некоторое время, пытаясь отладить работу с Visual Студийный код, с ограниченным успехом. Первая проблема заключается в том, что для настройки конфигурации attach необходимо указать исполняемый файл python (а не идентификатор процесса). Я не знаю, как это должно работать, если у вас есть более одного активного python процесса, что часто происходит.

Откладывая это, я настроил конфигурацию launch для укажите на исполняемый файл i python, который является наиболее удобным для использования. Когда я пытаюсь начать отладку, я получаю следующее:

enter image description here

Может кто-нибудь объяснить это?

Если я изменю исполняемый файл на обычный 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 ++

...