J'ai téléchargé et compilé Python 3.5 sur une machine CentOS 6.5. Cela fonctionne sans problème. Le problème est que je dois utiliser gdb
pour déboguer un bogue subtil impliquant une surutilisation du processeur pendant ma python exécution du programme.
D'après la documentation officielle Python sur extension gdb , ils disent que la seule chose à faire est d'ajouter
add-auto-load-safe-path /path/to/dir/with/python-gdb.py
à ~/.gdbinit
. Je l'ai testé avec
gdb --args /path/to/python3.5/binary
(gdb) py-bt
mais je reçois
Undefined command: "py-bt"
gdb
est la version 7.2 et la prise en charge python activée).
Je l'ai trouvé! Vous devez ajouter /PATH_TO_PYTHON_SRC/Tools/gdb
à PYTHONPATH
, puis dans gdb
vous devriez pouvoir exécuter:
python import libpython
Source: https://sumitkgaur.wordpress.com/2014/05/13/python-debugging/
Baser sur un article de blog par Débogage des processus CPython avec gdb Une autre façon de résoudre le problème est de source python3.5-gdb.py
fichier. Exécutez la commande info auto-load
pour vérifier que les fichiers sont chargés (si c'est le cas) et sinon - chargez-les manuellement: source /usr/share/gdb/auto-load/usr/bin/python3.5-gdb.py
(! le chemin peut être différent).
Ensuite py-bt
devrait marcher!
EDITED: version py modifiée
gdb charge automatiquement les scripts CLI gdb (ou Python ou Scheme) en parcourant les arborescences de répertoires enracinées dans les répertoires de votre chemin de recherche scripts-directory . Pour chaque exécutable ou un objet partagé chargé, gdb recherche les scripts nommés objfile-gdb.gdb
(ou objfile-gdb.py
ou objfile-gdb.scm
).
Une façon de charger automatiquement les extensions gdb pour python
est de placer cette python-gdb.py
le fichier que vous avez téléchargé se trouve sous l'un des répertoires de votre chemin de répertoire de scripts. Par exemple, le python2.7-dbg
le package sur Ubuntu installe ces fichiers:
-rwxr-xr-x /usr/lib/debug/usr/bin/python2.7-gdb.py
lrwxrwxrwx /usr/lib/debug/usr/lib/libpython2.7.so.1.0-gdb.py -> ../bin/python2.7-gdb.py
Voici une session gdb qui montre comment le python2.7-gdb.py
le script est automatiquement chargé lorsque je commence à déboguer le /usr/bin/python
exécutable:
(gdb) show auto-load scripts-directory
List of directories from which to load auto-loaded scripts is $debugdir:$datadir/auto-load.
(gdb) set debug auto-load
(gdb) file /usr/bin/python
Reading symbols from /usr/bin/python...Reading symbols from /usr/lib/debug//usr/bin/python2.7...done.
auto-load: Attempted file "/usr/lib/debug/usr/bin/python2.7-gdb.gdb" does not exist.
auto-load: Expanded $-variables to "/usr/lib/debug:/usr/share/gdb/auto-load".
auto-load: Searching 'set auto-load scripts-directory' path "$debugdir:$datadir/auto-load".
auto-load: Attempted file "/usr/share/gdb/auto-load/usr/lib/debug/usr/bin/python2.7-gdb.gdb" does not exist.
auto-load: Attempted file "/usr/lib/debug/usr/bin/python2.7-gdb.py" exists.
auto-load: Loading python script "/usr/lib/debug/usr/bin/python2.7-gdb.py" by extension for objfile "/usr/lib/debug/usr/bin/python2.7".