HP gnu source-level debugger 5992-4701 User Manual

Page 66

Advertising
background image

until

, u

Continue running until a source line past the current line, in the
current stack frame, is reached. This command is used to avoid
single stepping through a loop more than once. It is like the
next

command, except that when until encounters a jump,

it automatically continues execution until the program counter
is greater than the address of the jump.

This means that when you reach the end of a loop after single
stepping though it, until makes your program continue
execution until it exits the loop. In contrast, a next command
at the end of a loop simply steps back to the beginning of the
loop, which forces you to step through the next iteration.

until

always stops your program if it attempts to exit the

current stack frame.

until

may produce somewhat counterintuitive results if the

order of machine code does not match the order of the source
lines. For example, in the following excerpt from a debugging
session, the f (frame) command shows that execution is stopped
at line 206; yet when we use until, we get to line 195:

((gdb)) f
#0 main (argc=4, argv=0xf7fffae8) at m4.c:206
206 expand_input();
((gdb)) until
195 for ( ; argc > 0; NEXTARG) {

This happened because, for execution efficiency, the compiler
had generated code for the loop closure test at the end, rather
than the start, of the loop―even though the test in a C for-loop
is written before the body of the loop. The until command
appeared to step back to the beginning of the loop when it
advanced to this expression; however, it has not really gone to
an earlier statement―not in terms of the actual machine code.

until

with no argument works by means of single instruction

stepping, and hence is slower than until with an argument.

until location

,

u location

Continue running your program until either the specified
location is reached, or the current stack frame returns. location
is any of the forms of argument acceptable to break (see

“Setting breakpoints” (page 52)

). This form of the command

uses breakpoints, and hence is quicker than until without an
argument.

66

Stopping and Continuing

Advertising