How to execute finish and then another command from inside commands?
c, gdb
Solution
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
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
Problem
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; } ``` And here is the corresponding GDB script: ``` b increment command 1 finish print i continue end ``` The problem is that the `finish` command prevents the commands that come after it (namely `print i` and `continue`) to not be called. Is there a way to tell GDB to print `i` right after any `increment` call?