How to execute finish and then another command from inside commands?

前端 未结 5 1450
长情又很酷
长情又很酷 2020-12-16 15:01

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;         


        
5条回答
  •  情书的邮戳
    2020-12-16 15:53

    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
    

提交回复
热议问题