我正在 gdb 中尝试 python 交互模式,但我不知道如何从其中更改变量。我知道如何在没有 python 的情况下做到这一点 -
set variable a = 10
。
我正在使用这个测试程序:
#include <stdio.h>
int main(int argc, char *argv[]) {
int a;
printf("Enter a: ");
scanf("%d", &a);
printf("You entered: %d\n", a);
}
我在
scanf()
之后放置了一个断点,当它被击中时,我进入 python 交互模式。现在我想将变量 a
更改为其他值。我尝试使用 a = 10
,但它没有改变,而是打印了我在 scanf()
中输入的相同值(在本例中为 5)。
(gdb) b main.c:6 断点 1 位于 0x8048503:文件 main.c,第 6 行。 (gdb)r 启动程序:/home/sashoalm/Desktop/test/a.out 输入:5 断点 1,main (argc=1, argv=0xbffff1d4 "����") 位于 main.c:6 6 printf("您输入: %d “, A); (gdb) python 交互式 >>> a = 10 >>> (gdb)c 继续。 您输入:5 【下1(进程26133)正常退出】
那么正确的做法是什么呢?
经过一番搜索 Python API 文档后,我找到了答案。我需要使用
gdb.execute('set var a = 10')
,它允许 python 脚本执行 gdb 命令,并且这些命令会被评估,就像用户编写了它们一样。
我用这段代码读取
a
,添加5,然后设置它:
符号 = gdb.lookup_symbol('a')[0] 框架 = gdb.selected_frame() 值 = 符号.值(帧) gdb.execute('set var a = %d' % (int(value)+5))