Cómo importar ‘GDB’ en Python

Estoy usando Python 2.7 y Python 3.1.3. Pero en mi Python no puedo “importar gdb”.

Me está dando un error como:

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

¿Cuál es la razón de esto? ¿Cómo debo resolver este problema?

import gdb solo funciona cuando su código Python se ejecuta dentro del proceso GDB. No se supone que funcione desde el intérprete de Python del sistema regular.

Explicación

  • GDB incorpora el intérprete de Python para que pueda usar Python como un lenguaje de extensión.
  • No puedes import gdb desde /usr/bin/python como si fuera una biblioteca de Python normal porque GDB no está estructurado como una biblioteca.
  • Lo que puede hacer es source MY-SCRIPT.py desde gdb (equivalente a ejecutar gdb -x MY-SCRIPT.py ).

Progtwig de ejemplo

Aquí hay un ejemplo autocontenido. Guarde el archivo a continuación para t.py :

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

correr:

 $ gdb -q -x t.py 

y verá el talón del PLT para la exit() desmontado. En x86-64 Linux:

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

He recostackdo algunos recursos sobre cómo aprender la API de Python de GDB aquí .

Puedes seguir este tutorial para instalar PythonGDB . El código de Python depende de una extensión en C.

Para Windows, hay una comstackción gdb suficientemente reciente en MinGW , pero no parece incluir el módulo de Python que puede importar (aún es compatible con las secuencias de comandos de Python en gdb). Tienes que instalar MinGW y luego instalar el paquete mingw-get install gdb usando mingw-get install gdb .

Si usa Cygwin , nuevamente hay un gdb suficientemente reciente en Cygwin Ports , sin un módulo de Python pero con compatibilidad con scripts de Python.

Supongo que sería posible comstackr gdb desde la fuente en cualquiera de las plataformas y obtener el módulo Python.

Me acabo de encontrar una situación similar al intentar depurar Webkit:

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

Entonces me di cuenta de que este script debería invocarse en gdb para que funcione:

 (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} 

Espero que esto ayude.

No puedo realizar pruebas ahora, pero creo que necesitas configurar y construir un GDB habilitado para Python. Echa un vistazo a esta guía .

Espero que eso ayude.

Esto está desactualizado, creo. De todos modos, siempre debe crear y configurar un GDB habilitado para Python.

Puedes escribir GDB usando el lenguaje de progtwigción Python. Esta función está disponible solo si GDB se configuró usando --with-python .

Tienes que configurar GDB usando esa opción:

 --with-python=location 

Donde location es la ubicación de python con la que desea utilizar GDB.