我具有以下形式的功能:
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
之后的所有内容都将被忽略。
是否可以编写这样的脚本(gdb
或python
)?
答案 0 :(得分:2)
在watch *a
之前,您可以通过run
运行该程序。
否则,您会得到类似以下内容的信息:No symbol "a" in current context.
所以尝试一下:
b foo
run
watch *a
commands
si
info reg
cont
end
cont