Грег Берли дает следующий ответ для пользователей Unix GCC:
После того, как вы создали расширение python для библиотеки или класса c++, вам может потребоваться отладка кода. В конце концов, это одна из причин обернуть библиотеку в питон. Ожидаемый побочный эффект или преимущество использования BPL заключается в том, что отладка должна быть изолирована в тестируемой библиотеке c++, учитывая, что код python минимален и повышается::python либо работает, либо нет. (т.е. Хотя ошибки могут возникать, когда метод обертывания недействителен, большинство ошибок улавливается компилятором.
Здесь показаны основные шаги, необходимые для запуска сессии gdb для отладки библиотеки c++ через python. Обратите внимание, однако, что вы должны начать сеанс gdb в каталоге, который содержит ваш модуль BPL my_ext.so.
Подход Грега работает еще лучше, используя команду «gdb» Emacs, поскольку она покажет вам каждую строку источника, когда вы пройдете через нее.
WindowsМое любимое решение для отладки — отладчик, который поставляется с Microsoft Visual C++. 7. Этот отладчик, по-видимому, работает с кодом, генерируемым всеми версиями наборов инструментов Microsoft и Metrowerks; он твердый и «просто работает», не требуя никаких специальных трюков от пользователя.
Рауль Гоф предоставил следующее для gdb в Windows:
Поддержка gdb для Windows DLL в последнее время улучшилась, поэтому теперь можно отлаживать расширения Python с помощью нескольких трюков. Во-первых, вам понадобится современный gdb с поддержкой минимального извлечения символов из DLL. Любой gdb начиная с версии 6 или Cygwin gdb-20030214-1 и далее должен делать. Подходящий релиз будет иметь раздел в файле gdb.info под символами Configuration - Native - Cygwin Native - Non-debug DLL. См. этот раздел информации для более подробной информации о процедурах, изложенных здесь.
Во-вторых, кажется необходимым установить точку останова в интерпретаторе Python, а не использовать ^C для прерывания выполнения. Хорошим местом для установки этой точки прерывания является PyOS_Readline, которая прекратит выполнение непосредственно перед чтением каждой интерактивной команды Python. Вы должны позволить Python начать один раз под отладчиком, чтобы он загружал свой собственный DLL, прежде чем вы сможете установить точку останова:
Если вы запускаете тесты модулей расширения с помощьюBoost.Build, используя правило<boost-python-runtest>, вы можете попросить его запустить свой отладчик для вас, добавив «--debugger=отладчик" на вашу командную строку:
Это также может быть чрезвычайно полезно, чтобы добавить<-d+2>вариант, когда вы запускаете тест, потому что увеличить. Затем создайте точные команды, которые он использует для вызова. Это всегда будет включать в себя настройку PYTHONPATH и других важных переменных среды, таких как LD_LIBRARY_. PATH, который может понадобиться вашему отладчику, чтобы все работало правильно.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.