我在gdb中尝试使用python-interactive模式,但我无法弄清楚如何从内部更改变量。我知道怎么做没有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 Breakpoint 1 at 0x8048503: file main.c, line 6. (gdb) r Starting program: /home/sashoalm/Desktop/test/a.out Enter a: 5 Breakpoint 1, main (argc=1, argv=0xbffff1d4 "\214\363\377\277") at main.c:6 6 printf("You entered: %d\n", a); (gdb) python-interactive >>> a = 10 >>> (gdb) c Continuing. You entered: 5 [Inferior 1 (process 26133) exited normally]
那么正确的方法是什么?
答案 0 :(得分:3)
在搜索Python API文档后,我找到了答案。我需要使用gdb.execute('set var a = 10')
,它允许python脚本执行gdb命令,并且命令被评估为用户编写它们。
我使用此代码阅读a
,向其中添加5然后设置它:
symbol = gdb.lookup_symbol('a')[0] frame = gdb.selected_frame() value = symbol.value(frame) gdb.execute('set var a = %d' % (int(value)+5))