从 GDB 的 python 交互模式中读取/写入变量/符号

问题描述 投票:0回答:1

我正在 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)正常退出】

那么正确的做法是什么呢?

c gdb
1个回答
3
投票

经过一番搜索 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))
© www.soinside.com 2019 - 2024. All rights reserved.