从被调试的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 同时使用 SIGUSR1 和 SIGUSR2 与 gdb 进行通信,因此如果您的程序也需要这些信号,可能会有冲突。
项目详情
关闭
pygdb2-0.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2a35f5a25ca7bb18c03dfd4a0ff94798ab613faedf3f4015c2d162a9e26a3c61 |
|
MD5 | 22f8163cfbbbc29fd21e8a53dd12caa9 |
|
BLAKE2b-256 | 4d066c8ad759e3fbc07f064071db9ff306cc6cd2546daa56dc868c788a624b77 |