Używam GDB do debugowania błędu segmentacji w mojej aplikacji Python na Kubuntu 12.04. Podobno GDB w wersji 7 ma wbudowane makra do wyodrębniania informacji o stosie pytona (http://docs.python.org/devguide/gdb.html), ale mam problem z uruchomieniem go. Zainstalowałem python-dbg.
Kiedy pytam o śledzenie stosu pytona w GDB, wynik wygląda następująco:
(gdb) py-bt
#5 (unable to read python frame information)
#16 (unable to read python frame information)
#26 (unable to read python frame information)
...
Moja wersja GDB to 7.4-2012.04-0ubuntu2, Python to 2.7.3-0ubuntu3.
Na Ubuntu 16.04 udało mi się pobrać śledzenie stosu Python w Python 3.5 przez:
Instalowanie
python3-dbg
ipython3-dev
:$ sudo apt install python3-dbg python3-dev
python3-dbg
pakiet zawiera krótką dokumentację, jak go używać, z/usr/share/doc/python3-dbg/README.debug
której skorzystam w następnym kroku.Dołączanie rozpakowanego skryptu pomocniczego GDB
/usr/share/doc/python3.5/gdbinit.gz
do~/.gdbinit
:zcat /usr/share/doc/python3.5/gdbinit.gz >> ~/.gdbinit
Teraz gdb będzie w stanie znaleźć symbole dla pliku binarnego Pythona i
py-bt
działa w celu wyświetlania śladu stosu Pythona w gdb:źródło
pystack
ale nie mapy-bt
. Masz pomysł, co się dzieje?python 3.5
mimo tego, że już zainstalowałempython 3.6
?Może to komuś pomaga: plik binarny nazywa się
python2.7-dbg
w moim systemie Debian, pochodzącym zpython2.7-dbg
pakietu. Zainstalowałem równieżpython2.7-dev
pakietapt-get source python2.7-dbg
, abygdb
można było znaleźć pliki źródłowe interpretera Pythona.Po tym wszystkim udało mi się debugować, na którym się
SIGSEGV
uruchamiałem: https://bugs.python.org/issue34870źródło