从GDB的python交互模式

时间:2016-06-06 07:57:46

标签: c gdb

我在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]

那么正确的方法是什么?

1 个答案:

答案 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))