web-dev-qa-db-fra.com

Comment importer 'GDB' en Python

J'utilise Python 2.7 et Python 3.1.3. Mais dans mon Python, je ne peux pas "importer de gdb".

Cela me donne une erreur en tant que:

>>> import gdb
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
ImportError: No module named gdb
>>>

Quelle est la raison de cela? Comment dois-je résoudre ce problème?

23
Sagar Gupta M.

import gdb ne fonctionne que lorsque votre code Python est exécuté dans le processus GDB. Ce n'est pas censé fonctionner avec l'interpréteur Python habituel.

Explication

  • GDB incorpore l'interpréteur Python pour qu'il puisse utiliser Python comme langage d'extension.
  • Vous ne pouvez pas seulement import gdb à partir de /usr/bin/python comme si c'était une bibliothèque Python ordinaire, car GDB n'est pas structuré comme une bibliothèque.
  • Ce que vous pouvez faire est source MY-SCRIPT.py à partir de gdb (équivalent à l'exécution de gdb -x MY-SCRIPT.py).

Exemple de programme

Voici un exemple autonome. Enregistrez le fichier ci-dessous dans t.py:

import gdb
gdb.execute('file /bin/cat')
o = gdb.execute('disassemble exit', to_string=True)
print(o)
gdb.execute('quit')

courir:

$ gdb -q -x t.py 

et vous verrez le talon PLT pour exit() démonté. Sous Linux x86-64:

Dump of assembler code for function exit@plt:
   0x0000000000401ae0 <+0>:  jmpq   *0x20971a(%rip)    # 0x60b200 <[email protected]>
   0x0000000000401ae6 <+6>:  pushq  $0x3d
   0x0000000000401aeb <+11>: jmpq   0x401700
End of assembler dump.

J'ai rassemblé des ressources sur l'apprentissage de l'API Python GDB ici .

30
scottt

Vous pouvez suivre ce tutoriel pour installer PythonGDB . Le code Python dépend d'une extension C

Pour Windows, il y a assez récemment gdb build in MinGW , mais il ne semble pas inclure le module Python que vous pouvez importer (supporte toujours les scripts Python dans gdb). Vous devez installer MinGW puis installer le paquet gbd en utilisant mingw-get install gdb.

Si vous utilisez Cygwin , il y a encore une gdb assez récente dans Cygwin Ports , sans module Python mais avec la prise en charge des scripts Python.

Je suppose qu’il serait possible de construire gdb à partir du source sur l’une ou l’autre des plateformes et d’obtenir le module Python.

3
TryPyPy

Je ne peux pas tester maintenant, mais je pense que vous devez configurer et créer une GDB compatible Python. Jetez un oeil à ce guide .

J'espère que ça aide.

Ceci est obsolète, je pense. Quoi qu'il en soit, vous devez toujours créer et configurer une GDB compatible Python.

Vous pouvez créer un script GDB en utilisant le langage de programmation Python. Cette fonctionnalité est disponible uniquement si GDB a été configuré avec --with-python.

Vous devez configurer GDB en utilisant cette option:

--with-python=location

location est l'emplacement de python avec lequel vous souhaitez utiliser GDB.

1
Donovan

Je viens de rencontrer la même situation lorsque j'essayais de déboguer Webkit:

$ python Tools/gdb/webkit.py
Traceback (most recent call last):
  File "Tools/gdb/webkit.py", line 38, in <module>
    import gdb
ImportError: No module named gdb

J'ai alors réalisé que ce script devait être appelé dans gdb pour le faire fonctionner:

(gdb) source Tools/gdb/webkit.py
(gdb) p run
$1 = (const WebCore::TextRun &) @0x7fffffffa450: {m_characters = "Plugin Testsa", m_len = 12, m_xpos = 0, 
  m_padding = 0, m_allowTabs = false, m_rtl = false, m_directionalOverride = false, 
  m_applyRunRounding = true, m_applyWordRounding = true, m_disableSpacing = false}

J'espère que cela t'aides.

1
Deqing