如何在Python中导入'GDB'

Sag*_* M. 25 python gdb

我使用的是Python 2.7和Python 3.1.3.但在我的Python中,我无法"导入gdb".

它给了我一个错误:

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

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

sco*_*ttt 34

import gdb仅在Python代码在GDB进程中运行时才有效.它不应该从常规系统Python解释器工作.

说明

  • GDB嵌入了Python解释器,因此它可以使用Python作为扩展语言.
  • 不能只是import gdb/usr/bin/python喜欢它的一个普通的Python库,因为GDB不规整为库.
  • 你可以做的是source MY-SCRIPT.py从gdb(相当于运行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')
Run Code Online (Sandbox Code Playgroud)

跑:

$ gdb -q -x t.py 
Run Code Online (Sandbox Code Playgroud)

你会看到PLT存根被exit()拆解了.在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.
Run Code Online (Sandbox Code Playgroud)

我一直在学习Python的GDB API收集了一些资源在这里.


Don*_*van 2

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

我希望这有帮助。

我认为这已经过时了。无论如何,您始终需要构建和配置支持 Python 的 GDB。

您可以使用 Python 编程语言编写 GDB 脚本。仅当使用配置 GDB 时,此功能才可用--with-python

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

--with-python=location
Run Code Online (Sandbox Code Playgroud)

location您想要使用 GDB 的 python 的位置在哪里。