J'utilise GDB pour déboguer une erreur de segmentation dans mon application python sous Kubuntu 12.04. La version 7 de GDB est supposément dotée de macros intégrées permettant d'extraire des informations sur la pile python (http://docs.python.org/devguide/gdb.html), mais je ne parviens pas à la faire fonctionner. J'ai installé python-dbg.
Lorsque je demande une trace de pile python dans GDB, le résultat est le suivant:
(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 de GDB est 7.4-2012.04-0-0, 2Python est 2.7.3-0ubuntu3.
Voici le problème: pour avoir accès aux symboles de débogage dans GDB, vous devez appeler un autre binaire: "python-dbg" au lieu de "python" (trouvé dans /usr/share/doc/python2.7-dbg/README.debug ).
Sur Ubuntu 16.04, j’ai réussi à obtenir Python trace de pile dans Python 3.5 par:
Installer python3-dbg
et python3-dev
:
$ Sudo apt install python3-dbg python3-dev
Le paquet python3-dbg
est livré avec une courte documentation sur son utilisation dans /usr/share/doc/python3-dbg/README.debug
que je vais utiliser à la prochaine étape.
Ajout du script d'assistance GDB non compressé /usr/share/doc/python3.5/gdbinit.gz
à ~/.gdbinit
:
zcat /usr/share/doc/python3.5/gdbinit.gz >> ~/.gdbinit
Maintenant, gdb sera capable de trouver des symboles pour Python binary et py-bt
fonctionne pour l'affichage de la trace de pile Python dans gdb:
$ gdb -p 4762
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos Word" to search for commands related to "Word".
Attaching to process 4762
[New LWP 4852]
[New LWP 4853]
[New LWP 4854]
[Thread debugging using libthread_db enabled]
Using Host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
0x00007f38e43deb5d in poll () at ../sysdeps/unix/syscall-template.S:84
84 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) py-bt
Traceback (most recent call first):
File "/usr/bin/indicator-cpufreq", line 80, in <module>
Gtk.main()
(gdb)
Cela peut peut-être aider quelqu'un: le binaire s'appelle python2.7-dbg
sur mon système Debian, et provient du paquet python2.7-dbg
. J'ai également installé le paquetage python2.7-dev
et apt-get source python2.7-dbg
afin que gdb
puisse trouver les fichiers source dans l'interpréteur Python.
Avec tout cela en place, j'ai réussi à déboguer la SIGSEGV
que je rencontrais dans: https://bugs.python.org/issue3487