Function: dbg_up
Class: gp
Section: programming/control
C-Name: dbg_up
Prototype: vD1,L,
Help: dbg_up({n=1}): (break loop) go up n frames, which allows to inspect data
 of the parent function.
Doc: (In the break loop) go up $n$ frames, which allows to inspect data of the
 parent function. To cancel a \tet{dbg_up} call, use \tet{dbg_down}.
 \bprog
 ? x = 0;
 ? g(x) = x-3;
 ? f(x) = 1 / g(x+1);
 ? for (x = 1, 5, f(x+1))
    ***   at top-level: for(x=1,5,f(x+1))
    ***                           ^-------
    ***   in function f: 1/g(x+1)
    ***                   ^-------
    *** _/_: impossible inverse in gdiv: 0.
    ***   Break loop: type 'break' to go back to GP prompt
  break> x
  2
  break> dbg_up()
    ***   at top-level: for(x=1,5,f(x+1))
    ***                           ^-------
  break> x
  1
  break> dbg_up()
    ***   at top-level: for(x=1,5,f(x+1))
    ***                           ^-------
  break> x
  1
  break> dbg_up()
    ***   at top-level: for(x=1,5,f(x+1))
    ***                 ^-----------------
  break> x
  0
  break> dbg_down()    \\ back up once
    ***   at top-level: for(x=1,5,f(x+1))
    ***                           ^-------
  break> x
  1
 @eprog\noindent The above example shows that the notion of GP frame is
 finer than the usual stack of function calls (as given for instance by the
 GDB \kbd{backtrace} command): GP frames are attached to variable scopes
 and there are frames attached to control flow instructions such as a
 \kbd{for} loop above.
