如何从内部命令执行完成,然后执行另一个命令? [英] How to execute finish and then another command from inside commands?
问题描述
这是我的代码结构的简化示例:
This is a reduced example of the structure of my code:
void increment(int j);
int main()
{
int i = 0;
while(1) {
i = increment(i);
}
return 0;
}
int increment(int j)
{
return j + 1;
}
这里是对应的 GDB 脚本:
And here is the corresponding GDB script:
b increment
command 1
finish
print i
continue
end
问题在于 finish
命令会阻止其后的命令(即 print i
和 continue
)不被调用.
The problem is that the finish
command prevents the commands that come after it (namely print i
and continue
) to not be called.
有没有办法告诉 GDB 在任何 increment
调用之后立即打印 i
?
Is there a way to tell GDB to print i
right after any increment
call?
推荐答案
您显然可以通过将所有命令包装在单个 python 调用中来解决此错误,例如
You can apparently work around this bug by wrapping all the commands in a single python invocation e.g.
(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
不需要 python 的第二个解决方法似乎是定义一个新的 gdb 命令并在命令中运行:
edit: a 2nd work around that doesn't require python appears to be defining a new gdb command and running that in commands:
define foo
print *i
set $addrOfI = i
finish
print *$addrOfI
end
break doSomething
commands
foo
end
这篇关于如何从内部命令执行完成,然后执行另一个命令?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!