2011-01-25 26 views
23

Estoy usando Python 2.7 y Python 3.1.3. Pero en mi Python no puedo "importar gdb".Cómo importar 'GDB' en Python

Me está dando un error como:

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

¿Qué hay una razón para esto? ¿Cómo debo resolver este problema?

+0

Tal vez un duplicado de http://stackoverflow.com/questions/3482869/invoke-and-control-gdb-from-python – Donovan

+0

Alberteddu has trabajado en esto. porque no puedo entender la documentación que figura en el enlace. ¿Puedes por favor guiarme? –

+0

¿Cuál es su sistema operativo? – Donovan

Respuesta

1

No puedo realizar pruebas ahora, pero creo que debe configurar y generar un GDB habilitado para Python. Eche un vistazo a este guide.

Espero que ayude.

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

Puede guiar GDB utilizando el lenguaje de programación Python. Esta función solo está disponible si GDB se configuró utilizando --with-python.

tiene que configurar GDB usando esa opción:

--with-python=location 

Dónde location es la ubicación del pitón que le gustaría utilizar con el BGF.

3

Puede seguir this tutorial para instalar PythonGDB. El Python code depende de un C extension.

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

Si usa Cygwin, hay una vez más un gdb suficientemente reciente en Cygwin Ports, sin un módulo de Python pero con soporte de scripts de Python.

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

+0

PythonGDB no incluye ningún archivo de este nombre (al menos no en mi instalación). Sin embargo, hay un archivo con este nombre en [Pydb] (http://bashdb.sourceforge.net/pydb/). Con la información dada, es implícitamente indecidible lo que busca el OP. –

+1

Sin embargo, hay un módulo gdb, por lo que puede importar gdb. – TryPyPy

+0

¿Puede ejecutar gdb solo en Windows? ¿Cómo lo instalaste? – TryPyPy

29

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

Explicación

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

Ejemplo de programa

Aquí está un ejemplo de auto contenida.Guarde el archivo de abajo para t.py:

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

de ejecución:

$ gdb -q -x t.py 

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

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

que hemos recopilado algunos recursos en el aprendizaje de la API de Python BGF here.

+0

He creado mi propio gdb, y python funciona desde adentro '(gdb) python print (" hello ")' funciona bien, pero '(gdb) python import gdb' no funciona. (Mismo mensaje que la pregunta original). Construí gdb 7.9 desde cero usando './configure --with-python'. ¿Alguna idea de por qué todavía no funciona? Todo lo que quiero usar es las características de Pretty Print para la depuración de STL. –

+0

@MarkLakata, sospecho que no instaló gdb y especialmente los archivos que gdb busca bajo '--with-gdb-datadir' correctamente. Prueba 'strace -eopen gdb' y mira las rutas relacionadas con python, suponiendo que estés en Linux. – scottt

+0

p. Ej. 'gdb.command' se importa de'/usr/share/gdb/python/gdb/command/__ init __. py' en el gdb del sistema Red Hat. – scottt

1

Me acabo de encontrar con la situación similar cuando se trata de depurar 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 

luego me di cuenta que este script debe ser invocado en GDB darlo a trabajar:

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