GDB在观察点被击中后执行下一条指令

时间:2019-01-09 06:47:06

标签: c gdb

我具有以下形式的功能:

void foo(){
    int *a = //...
    *a = 1;
    //some actions
    *a = 2;
    //some actions
    *a = 3;
    //some actions
    //etc...
}

我想在a上设置观察点,用si执行下一条指令,打印寄存器,然后继续直到a的观察点再次被击中并重复。

我写了以下脚本:

b foo
watch *a
commands
    si
    info reg
    cont
end
cont

问题是它在命中第一个观察点后停止,既不打印寄存器也不继续执行。正如我在docs

中所读
  

在恢复命令后,命令列表中的任何其他命令   执行,被忽略。这是因为任何时候您恢复执行   (即使是简单的下一步或步骤),您可能还会遇到另一个   断点-可能具有自己的命令列表,导致   关于要执行哪个列表的不确定性。

si之后的所有内容都将被忽略。

是否可以编写这样的脚本(gdbpython)?

1 个答案:

答案 0 :(得分:2)

watch *a之前,您可以通过run运行该程序。

否则,您会得到类似以下内容的信息:No symbol "a" in current context.

所以尝试一下:

b foo
run
watch *a
commands
    si
    info reg
    cont
end
cont