跳转到主要内容

从被调试的Python程序内部控制GDB

项目描述

pygdb2 是一个python模块,允许您向底层的 gdb 进程发送命令。例如,它可以用来自动和编程地添加断点和观察点。

如何安装

确保已安装 pygdb2

$ pip install pygdb2

然后,您需要通过在您的 ~/.gdbinit

python import pygdb2

如何使用它

您需要使用特殊的 pyrun 命令在 gdb 中启动您的python程序

$ gdb --args python myscript.py
...
(gdb) pyrun
...

从python程序,您可以使用 pygdb2.set_trace() 进入 gdb 提示符,或使用 pygdb2.execute()gdb 发送命令。

(gdb) 提示符下,可以调用 pdb 命令进入Python级别的对应调试器。

示例

例如,以下代码为使用 ctypes 创建的特定内存区域添加观察点

import ctypes
import pygdb2

def main():
    buf = ctypes.c_int()
    buf.value = 42
    adr = ctypes.cast(ctypes.pointer(buf), ctypes.c_void_p)
    # enter gdb when we write to this memory
    pygdb2.execute("watch *(int*)%d" % adr.value)

    i = 0
    while i < 5:
        print i
        i += 1
        if i == 2:
            buf.value = 43 # GDB stops here

以下是一个gdb/pdb会话的示例

$ gdb --args python set_watchpoint.py
...
(gdb) # lines prefixed "pygdb2:" contain the command coming from pygdb2.execute()
(gdb) pyrun
...
pygdb2: watch *(int*)14079984
Hardware watchpoint 1: *(int*)14079984
0
1
Hardware watchpoint 1: *(int*)14079984

Old value = 42
New value = 43
i_set (ptr=0xd6d7f0, value=<value optimized out>, size=4) at /build/buildd/python2.7-2.7.1/Modules/_ctypes/cfield.c:663
663 /build/buildd/python2.7-2.7.1/Modules/_ctypes/cfield.c: No such file or directory.
    in /build/buildd/python2.7-2.7.1/Modules/_ctypes/cfield.c

(gdb) # now we are debugging at the C level
(gdb) # in particular, we are inside function of _ctypes
(gdb) # which sets the value of the buffer

(gdb) # Let's jump to the Python level
(gdb) pdb
Signal received, entering pdb
Traceback:
  File "set_watchpoint.py", line 20, in <module>
    main()
  File "set_watchpoint.py", line 16, in main
    buf.value = 43 # we should enter gdb here
> /home/antocuni/env/src/pygdb2/pygdb2/test/set_watchpoint.py(12)main()
-> while i < 5:
(Pdb++) print i
2
(Pdb++) c
2
3
4

Program exited normally.
(gdb) q

使用信号

pygdb2 同时使用 SIGUSR1SIGUSR2gdb 进行通信,因此如果您的程序也需要这些信号,可能会有冲突。

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。

源代码分发

pygdb2-0.1.tar.gz (3.5 kB 查看哈希值)

上传时间 源代码

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面