Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

How do I debug my Python extensions?

Boost , Boost.Python , Chapter 4. Frequently Asked Questions (FAQs)

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Грег Берли дает следующий ответ для пользователей Unix GCC:

После того, как вы создали расширение python для библиотеки или класса c++, вам может потребоваться отладка кода. В конце концов, это одна из причин обернуть библиотеку в питон. Ожидаемый побочный эффект или преимущество использования BPL заключается в том, что отладка должна быть изолирована в тестируемой библиотеке c++, учитывая, что код python минимален и повышается::python либо работает, либо нет. (т.е. Хотя ошибки могут возникать, когда метод обертывания недействителен, большинство ошибок улавливается компилятором.

Здесь показаны основные шаги, необходимые для запуска сессии gdb для отладки библиотеки c++ через python. Обратите внимание, однако, что вы должны начать сеанс gdb в каталоге, который содержит ваш модуль BPL my_ext.so.

(gdb) target exec python
(gdb) run
>>> from my_ext import *
>>> [C-c]
(gdb) break MyClass::MyBuggyFunction
(gdb) cont
>>> pyobj = MyClass()
>>> pyobj.MyBuggyFunction()
Breakpoint 1, MyClass::MyBuggyFunction ...
Current language:  auto; currently c++
(gdb) do debugging stuff

Подход Грега работает еще лучше, используя команду «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, прежде чем вы сможете установить точку останова:

$ gdb python
GNU gdb 2003-09-02-cvs (cygwin-special)
[...]
(gdb) run
Starting program: /cygdrive/c/Python22/python.exe
Python 2.2.2 (#37, Oct 14 2002, 17:02:34) [MSC 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> ^Z
Program exited normally.
(gdb) break *&PyOS_Readline
Breakpoint 1 at 0x1e04eff0
(gdb) run
Starting program: /cygdrive/c/Python22/python.exe
Python 2.2.2 (#37, Oct 14 2002, 17:02:34) [MSC 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Breakpoint 1, 0x1e04eff0 in python22!PyOS_Readline ()
   from /cygdrive/c/WINNT/system32/python22.dll
(gdb) cont
Continuing.
>>> from my_ext import *
Breakpoint 1, 0x1e04eff0 in python22!PyOS_Readline ()
   from /cygdrive/c/WINNT/system32/python22.dll
(gdb) # my_ext now loaded (with any debugging symbols it contains)

Debugging extensions through Boost.Build

Если вы запускаете тесты модулей расширения с помощьюBoost.Build, используя правило<boost-python-runtest>, вы можете попросить его запустить свой отладчик для вас, добавив «--debugger=отладчик" на вашу командную строку:

bjam -sTOOLS=vc7.1 "--debugger=devenv /debugexe" test
bjam -sTOOLS=gcc -sPYTHON_LAUNCH=gdb test

Это также может быть чрезвычайно полезно, чтобы добавить<-d+2>вариант, когда вы запускаете тест, потому что увеличить. Затем создайте точные команды, которые он использует для вызова. Это всегда будет включать в себя настройку PYTHONPATH и других важных переменных среды, таких как LD_LIBRARY_. PATH, который может понадобиться вашему отладчику, чтобы все работало правильно.


PrevUpHomeNext

Статья How do I debug my Python extensions? раздела Boost.Python Chapter 4. Frequently Asked Questions (FAQs) может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 4. Frequently Asked Questions (FAQs) ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 00:32:45/0.004162073135376/0