36

I am using Python 2.7 and Python 3.1.3. But in my Python I am unable to "import gdb".

It is giving me an error as:

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

What's a reason for this? How should I solve this problem?

6
  • Maybe a dup of stackoverflow.com/questions/3482869/… Commented Jan 25, 2011 at 10:45
  • Alberteddu have u worked on this. cos i am unable to understand the documentation given in the link. Can you please guide me. Commented Jan 25, 2011 at 11:03
  • 3
    You did not give enough information in your question. Where did you hear about this file, and what are you expecting it to do? What are you trying to achieve? Commented Jan 27, 2011 at 15:11
  • 2
    To use the gdb in python as described in sourceware.org/gdb/current/onlinedocs/gdb/Python.html Commented Jan 27, 2011 at 15:27
  • What operating system are you using? You probably need to install the python GDB package. Commented Jan 27, 2011 at 16:16

4 Answers 4

51

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 gdb
gdb.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 <[email protected]>
   0x0000000000401ae6 <+6>:  pushq  $0x3d
   0x0000000000401aeb <+11>: jmpq   0x401700
End of assembler dump.

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

Sign up to request clarification or add additional context in comments.

5 Comments

I've built by own gdb, and python works from inside (gdb) python print("hello") works fine, but (gdb) python import gdb doesn't work. (Same message as original Question). I built gdb 7.9 from scratch using ./configure --with-python. Any ideas why it still doesn't work? All I want to use is the Pretty Print features for STL debugging.
@MarkLakata, I suspect you didn't install gdb and especially the files that gdb look for under --with-gdb-datadir correctly. Try strace -eopen gdb and stare at the paths related to python, assuming you're on Linux.
e.g. gdb.command is imported from /usr/share/gdb/python/gdb/command/__init__.py in the Red Hat system gdb.
Ugh, I did install gdb, but it was not installed in /usr (we need to support multiple versions on our platform). Alright, thanks for the pointers.
FWIW the gdb maintainer seems to believe this should work outside of gdb as well, see tromey.com/blog/?p=806
3

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.

5 Comments

PythonGDB does not include any file of this name (at least not in my installation). There is a file of this name in Pydb though. With the information given, it's imply undecidable what the OP is after.
There's a gdb module, though, so he can indeed import gdb.
Are you able to run gdb by itself on Windows? How did you install it?
Sigh, there's no gdb module in MinGW's gdb.
Ok TryPyPy, i will try to give some more information as much as possible. I am working in WINDOWS XP, trying to build a script in PYTHONWIN32, i am writing this script so that it has to invoke a shell provided by MinGW, there it has to run gdb. In this gdb python script as to run my program. Every thing has to controlled by python script. 1st layer -> Python Script 2nd layes -> gdb 3rd layer -> my program.
2

I just ran into the similar situation when trying to debug 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

I then realized that this script should be invoked in gdb to make it working:

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

Hope this helps.

Comments

1

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.