How to import 'GDB' in Python How to import 'GDB' in Python python python

How to import 'GDB' in Python


import gdb only works when your Python code is running within the GDB process. It's not supposed to work from the regular system Python interpreter.

Explanation

  • GDB embeds the Python interpreter so it can use Python as an extension language.
  • You can't just import gdb from /usr/bin/python like it's an ordinary Python library because GDB isn't structured as a library.
  • What you can do is source MY-SCRIPT.py from within gdb (equivalent to running gdb -x MY-SCRIPT.py).

Example Program

Here's a self contained example. Save the file below to t.py:

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

run:

$ gdb -q -x t.py 

and you'll see the PLT stub for exit() disassembled. On x86-64 Linux:

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

I've collected some resources on learning the GDB Python API here.


You can follow this tutorial to install PythonGDB. The Python code depends on a C extension.

For Windows, there is a recent enough gdb build in MinGW, but it doesn't seem to include the Python module you can import (still supports Python scripting in gdb). You have to install MinGW and then install the gbd package using mingw-get install gdb.

If you use Cygwin, there's again a recent enough gdb in Cygwin Ports, without a Python module but with Python scripting support.

I suppose it'd be possible to build gdb from source in either platform and get the Python module.


I can't test now, but I think you need to configure and build a Python-enabled GDB. Take a look at this guide.

I hope that helps.

This is outdated, I think. Anyway, you always need to build and configure a Python enabled GDB.

You can script GDB using the Python programming language. This feature is available only if GDB was configured using --with-python.

You have to configure GDB using that option:

--with-python=location

Where location is the location of python you would like to use GDB with.