Python + C++ + SWIG | VS2017 + PyCharm2018 — дебаггинг

Комрады, кому-нибудь приходилось дебажить приложения, где часть — на Python, а часть — на плюсах и подключена к Питону через SWIG?

Недавно такая задача возникла, но оказалось, что для отладки C++ части просто приаттачить процесс к VS-дебаггеру не помогает. Кое-какой workaround нашел, но это не тот уровень комфорта :)
letyourmoneygrow.com/...​-and-pycharm-a-dirty-way

В идеале хотелось бы работать с плюсами в Visual Studio 2017, а с питоном — в PyCharm.

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

IMHO по ссылке все понятно и комфортно

Спасибо за комплимент (то что по ссылке — написано мной :)).
Но увы — предложенное решение не помогает в случае, когда на Python side используется еще numpy (а это весьма нужная библиотека в финансово-математических задачах).
Я подозреваю, что если ее ставить не через pip, а собрать из исходников в debug-конфигурации (а заодно, наверное, придется и сам Python собрать), то работать будет.
И так и придется делать, если нет другого решения. Но оно наверняка есть :)

для того чтобы в Visual Studio работал debuger нужны исходники и pdb файл для бинаря, через pip этого у вас не будет

numpy

зачем вам дебагать numpy?

numpy дебажить не нужно; он просто не работает (во всяком случае, у меня), если в качестве python interpreter выбрать python_d.exe

numpy не работает потому что python_d.exe грузит _d.pyd файлы которых у вас для numpy нет.
я бы вообще не связывался с python_d а по пробовал бы в extra_link_args добавить /DEBUG что бы получить .pdb этого должно хватить для дебага

Похоже что VS довольно радикально поменялись настройки.
Вот тут иструкция про решение схожей проблемы
docs.microsoft.com/...​nd-release-configurations
Но вот эта картинка: docs.microsoft.com/...​perties_pdb_cplusplus.png
уже не соответствует действительности, во всяком случае у меня и VS2015 (для которого писано), и тем более в VS2017 нет Linker (есть Librarian) и вкладки Debugging там нет...

Да ну.
imgur.com/a/XDVH4kB
VS2017
опцию для линкера тем более никто не убирал, это ж сколько бы makefileов поломалось бы.
вам нужно смотреть ваш setup.py чтобы он передавал /debug в линкер и для релиз билда тоже, вроде бы за это отвечает переменная extra_link_args

Librarian это когда static lib *.lib собираеш

Спасибо! Там как раз и нужен именно .lib
Что касается setup.py, то ему можно передать «недокументированный» агрумент -debug, но это не помогает, если запускать его с python.exe (а вот c python_d.exe помогает).
Ладно, пока dirty way, описанный мной худо-бедно задачу решает, а лазать на C++ сторону обычно не так уж часто надо.
Попробую еще при случае воодушевить core-разработчиков QuantLib’а решить вопрос :)

А не думал о таком подходе? Когда находишь баг в той же квантлиб, то делаешь тест на него на С или С++. И после у тебя будет набор тестов приемочных.
Ну и фиксишь уже в IDE для С и не мучаешься.
А, например, из матлаба уже давно забил отлаживать С либы подключаемые. Делаю тест и фикшу в С, так быстрее получается, чем атачится дебагером.

Спасибо! Там как раз и нужен именно .lib

интересно зачем? вроде как питон грузит .pyd файлы, на самом деле переименованные .dll файлы и для dll файла вам нужен pdb файл и исходники, иначе отладчик не взлетит

агрумент —debug

насколько я понимаю он делает следующие действия
— отключает оптимизации
— собирает pdb файл (опция /debug )
— собирает _d.pyd файл вместо .pyd файла
— собраный бинарь использует debug версию студийного плювого рантайма
изза последних двух действий обычный python.exe не грузит собраный екстеншен, просто имя файла на совпадает. Вам нужно слегка подправить setup.py чтобы компилятору опция /Zi и линкеру опция /debug передавалась всегда, не зависимо от наличия опции —debug

@Dmitry Panfilov
Спасибо, попробую пройтись строчка за строчкой по setup.py

@Viktor Chyzhdzenka
Тут дело не в поисках багов, а скорее в том чтоб понять, правильно ли ты вызываешь функции QuantLib’а.
Особенно остро эта проблема стоит в QuantLibXL
letyourmoneygrow.com/...​urvy-way-fit-yield-curve
Может ни хрена не работать просто потому, что неправильно вызываются функции QL (а просто читать код с переводом данных их Excel до QL — себе дороже, надо дебажить саму QL)

QuantLib Python в этом отношении, вроде как, получше — но с учетом того как QL (зло)употребляет возможностями C++, в т.ч. templat’ами которых в Питоне нет, все равно будут какие-то отклонения в порядке вызова бизнес-логики. И вот тут-то опять-таки надо посмотреть на стороне QuantLib’а, что за данные в него переданы и какие функции вызываются.

Понимаю, тебя. Но ты вляпываешься в конкретный геморрой. Отладочную печать довешивай во враппер (биндинг).
С матлабом у меня часто такая проблема. Он матрицы в фортрановском варианте держит, а в С либах обычно они построчные. С картинками там вообще по слоям и по столбцам, в С либах обычно построчно и цвета подряд.
Так что часто добавляю проверки на порядок элементов в матрицах.

Мне тоже хотелось бы какого универсального IDE, чтобы еще и дебагеры подключал правильные и дебаг инфу находил. Но ничего такого я не нашел. Видно такое очень сложно для реализации.

Ну или делаешь собственный враппер для нужных тебе функций только и не пользуешься обобщенным. Часто такой велосипед позволяет сэкономить кучу времени разработки.

Да до сих пор как-то удавалось без проблем аттачить процесс, из которого вызывается c++ библиотека, к VS Debugger’у — и вперед.

Тут еще, как я понимаю, проблема в том, что VS2017 пытается думать там, где его не просят: понимает что перед ним вызов плюсового кода не просто откуда-то, а именно из Питона — пытается это учесть, но в результате вываливается в exception
(в VS2015 такого нет).

Насчет универсального IDE, VS пытается стать таким, возможно, мою проблему можно решить тем, чтоб и Python запускать из VS, а не из PyCharm (только пока непонятно как именно).

Дебагеру до лампочки куда приаттачиваться, если ты ему укажешь, где дебаг инфа лежит. Без этой инфы он тоже приаттачится, но исходников не найдет.
А вот чтобы это делала IDE сама — это часто танец с бубном. Или должно быть достаточное для этого количество настроек в IDE (нетривиальных для джунов) или она начинает умничать и чаще всего неправильно.
VS уже стала монстром перегруженым всем — она одновременно пытается быть удобной для джунов и давать инструмент для профи. Это не возможно.
Но просто атачся студией к процессу, который либу грузит и объясни ей, где дебаг инфа (в студии это обычно далеко в настройках спрятаноили вообще нет таких).
Причем в каждой новой версии Студии ломают то, что уже работало в прошлых. Меня достала уже 2015 и я свалил на QtCreator.

Кстати официальный метод отладки С и С++ у матлаба именно аттачится к процессу, что либу загрузил. Меня такой метод раздражает. Проще написать тест и отладиться на нем. А для проверки параметров добавляю отладочную печать на время отладки.

Меня достала уже 2015 и я свалил на QtCreator.

Я периодически работаю и на том и на этом к.м.к. креатор «шаг вправо шаг влево» и вообще всё аццкий какой-то ад проще к qmake чистому возвращаться ))

Меня QtrCreator в связке с Cmake полностью удовлетворяет, как IDE. Пока не перегружен функциональностью и делает только то, что я явно сказал.

Подписаться на комментарии