Я использую GDB для отладки ошибки сегментации в моем приложении на Python на Kubuntu 12.04. Предположительно, в GDB версии 7 есть встроенные макросы для извлечения информации о стеке python (http://docs.python.org/devguide/gdb.html), но у меня возникают проблемы с его работой. Я установил Python-DBG.
Когда я запрашиваю трассировку стека Python в GDB, результат выглядит так:
(gdb) py-bt
#5 (unable to read python frame information)
#16 (unable to read python frame information)
#26 (unable to read python frame information)
...
Моя версия GDB 7.4-2012.04-0ubuntu2, Python 2.7.3-0ubuntu3.
В Ubuntu 16.04 мне удалось получить трассировку стека Python в Python 3.5:
Установка
python3-dbg
иpython3-dev
:$ sudo apt install python3-dbg python3-dev
python3-dbg
Пакет поставляется с краткой документацией, как использовать его, в/usr/share/doc/python3-dbg/README.debug
котором я буду использовать на следующем шаге.Добавление распакованного вспомогательного сценария GDB
/usr/share/doc/python3.5/gdbinit.gz
в~/.gdbinit
:zcat /usr/share/doc/python3.5/gdbinit.gz >> ~/.gdbinit
Теперь GDB сможет находить символы для двоичного файла Python и
py-bt
работает для отображения трассировки стека Python в GDB:источник
pystack
но нетpy-bt
. Есть идеи, что происходит?python 3.5
даже если я уже установленpython 3.6
?Может быть, это кому-то поможет: бинарный файл назван
python2.7-dbg
в моей системе Debian изpython2.7-dbg
пакета. Я также установилpython2.7-dev
пакет иapt-get source python2.7-dbg
, чтобы онgdb
мог найти исходные файлы для интерпретатора Python.Имея все это на месте, мне удалось отладить то, с чем
SIGSEGV
я столкнулся: https://bugs.python.org/issue34870источник