gdb: Jumping
17.2 Continuing at a Different Address
======================================
Ordinarily, when you continue your program, you do so at the place where
it stopped, with the 'continue' command. You can instead continue at an
address of your own choosing, with the following commands:
'jump LOCATION'
'j LOCATION'
Resume execution at LOCATION. Execution stops again immediately if
there is a breakpoint there. Specify Location, for a
description of the different forms of LOCATION. It is common
practice to use the 'tbreak' command in conjunction with 'jump'.
Setting Breakpoints Set Breaks.
The 'jump' command does not change the current stack frame, or the
stack pointer, or the contents of any memory location or any
register other than the program counter. If LOCATION is in a
different function from the one currently executing, the results
may be bizarre if the two functions expect different patterns of
arguments or of local variables. For this reason, the 'jump'
command requests confirmation if the specified line is not in the
function currently executing. However, even bizarre results are
predictable if you are well acquainted with the machine-language
code of your program.
On many systems, you can get much the same effect as the 'jump'
command by storing a new value into the register '$pc'. The difference
is that this does not start your program running; it only changes the
address of where it _will_ run when you continue. For example,
set $pc = 0x485
makes the next 'continue' command or stepping command execute at address
'0x485', rather than at the address where your program stopped.
Continuing and Stepping Continuing and Stepping.
The most common occasion to use the 'jump' command is to back
up--perhaps with more breakpoints set--over a portion of a program that
has already executed, in order to examine its execution in more detail.