如何在Python中导入GDB

2024-05-23 06:00:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Python2.7和Python3.1.3。但在我的Python中,我无法“导入gdb”。

它给了我一个错误:

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

这是什么原因?我该如何解决这个问题?


Tags: inimportmostinput错误linecallinteractive
3条回答

您可以按照this tutorial安装PythonGDBPython code依赖于C extension

对于Windows,在MinGW中有一个足够新的gdb build,但它似乎不包括可以导入的Python模块(仍然支持gdb中的Python脚本)。您必须install MinGW,然后使用mingw-get install gdb安装gbd包。

如果您使用Cygwin,那么Cygwin Ports中又有一个足够新的gdb,没有Python模块,但是有Python脚本支持。

我想在任何一个平台上都可以从源代码构建gdb并获得Python模块。

我现在无法测试,但我认为您需要配置和构建一个支持Python的GDB。看看这个guide

我希望这会有帮助。

我想这已经过时了。无论如何,您始终需要构建和配置启用Python的GDB。

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

您必须使用该选项配置GDB:

--with-python=location

其中location是要与GDB一起使用的python的位置。

import gdb仅当您的Python代码在GDB进程中运行时才起作用。它不应该在常规的系统Python解释器中工作。

解释

  • GDB嵌入了Python解释器,因此它可以使用Python作为扩展语言。
  • 你不能像普通的Python库一样从/usr/bin/pythonimport gdb,因为GDB不是一个库。
  • 你能做的就是从gdb内部source MY-SCRIPT.py(相当于运行gdb -x MY-SCRIPT.py)。

示例程序

这里有一个独立的例子。将下面的文件保存到t.py

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

运行:

$ gdb -q -x t.py 

您将看到exit()的PLT存根被反汇编。在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   0x401700
End of assembler dump.

我收集了一些关于学习GDB Python API here的资源。

相关问题 更多 >

    热门问题