J'utilise GDB pour déboguer un défaut de segmentation dans mon application python sur Kubuntu 12.04. Soi-disant GDB version 7 a des macros intégrées pour extraire des informations sur la pile python (http://docs.python.org/devguide/gdb.html), mais j'ai du mal à le faire fonctionner. J'ai installé python-dbg.
Lorsque je demande une trace de pile python dans GDB, le résultat ressemble à ceci:
(gdb) py-bt
#5 (unable to read python frame information)
#16 (unable to read python frame information)
#26 (unable to read python frame information)
...
Ma version GDB est 7.4-2012.04-0ubuntu2, Python est 2.7.3-0ubuntu3.
Sur Ubuntu 16.04, j'ai réussi à obtenir la trace de la pile Python dans Python 3.5 en:
Installation
python3-dbg
etpython3-dev
:$ sudo apt install python3-dbg python3-dev
python3-dbg
le package est livré avec une courte documentation sur la façon de l'utiliser dans/usr/share/doc/python3-dbg/README.debug
laquelle je l'utiliserai à l'étape suivante.Ajout d'un script d'aide GDB décompressé
/usr/share/doc/python3.5/gdbinit.gz
à~/.gdbinit
:zcat /usr/share/doc/python3.5/gdbinit.gz >> ~/.gdbinit
Maintenant, gdb pourra trouver des symboles pour le binaire Python et
py-bt
fonctionne pour afficher la trace de la pile Python dans gdb:la source
pystack
mais il n'y en a paspy-bt
. Une idée de ce qui se passe?python 3.5
même si j'ai déjà installépython 3.6
?Peut-être que cela aide quelqu'un: le binaire est nommé
python2.7-dbg
sur mon système Debian, provenant dupython2.7-dbg
paquet. J'ai également installé lepython2.7-dev
package etapt-get source python2.7-dbg
, afin degdb
pouvoir trouver les fichiers source de l'interpréteur Python.Avec tout cela en place, j'ai réussi à déboguer le que
SIGSEGV
je rencontrais: https://bugs.python.org/issue34870la source