从被调试的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 |