这是我的代码结构的简化示例:
void increment(int j);
int main()
{
int i = 0;
while(1) {
i = increment(i);
}
return 0;
}
int increment(int j)
{
return j + 1;
}
Run Code Online (Sandbox Code Playgroud)
这是相应的GDB脚本:
b increment
command 1
finish
print i
continue
end
Run Code Online (Sandbox Code Playgroud)
问题是该finish命令阻止了之后的命令(即print i和continue)被调用.
有没有办法告诉GDB i在任何increment电话后立即打印?
您可以通过将所有命令包装在单个python调用中来解决此错误,例如
(gdb) break doSomething
Breakpoint 1 at 0x400478: file iter.c, line 5.
(gdb) commands
Type commands for breakpoint(s) 1, one per line.
End with a line saying just "end".
>python gdb.execute("print i"); gdb.execute("finish"); gdb.execute("print i");
>end
Breakpoint 1, doSomething () at iter.c:5
5 while (i < 5)
$1 = 0
main (argc=1, argv=0x7fffffffe178) at iter.c:13
13 return 0;
$2 = 5
Run Code Online (Sandbox Code Playgroud)
编辑:第二个解决方法不需要python似乎是定义一个新的gdb命令并在命令中运行它:
define foo
print *i
set $addrOfI = i
finish
print *$addrOfI
end
break doSomething
commands
foo
end
Run Code Online (Sandbox Code Playgroud)