Chapter 16.
Altering Execution
Once you think you have found an error in your program, you might want to find out for certain
whether correcting the apparent error would lead to correct results in the rest of the run. You can find
the answer by experiment, using the gdb features for altering execution of the program.
For example, you can store new values into variables or memory locations, give your program a signal,
restart it at a different address, or even return prematurely from a function.
16.1. Assignment to variables
To alter the value of a variable, evaluate an assignment expression. Refer to Section 10.1
Expressions
.
For example,
print x=4
stores the value 4 into the variable
x
, and then prints the value of the assignment expression (which
is 4). Refer to Chapter 14
Using gdb with Different Languages
, for more information on operators in
supported languages.
If you are not interested in seeing the value of the assignment, use the
set
command instead of the
command.
set
is really the same as
except that the expression’s value is not printed
and is not put in the value history (refer to Section 10.8
Value history
). The expression is evaluated
only for its effects.
If the beginning of the argument string of the
set
command appears identical to a
set
subcommand,
use the
set variable
command instead of just
set
. This command is identical to
set
except for
its lack of subcommands. For example, if your program has a variable
width
, you get an error if you
try to set a new value with just
set width=13
, because gdb has the command
set width
:
(gdb) whatis width
type = double
(gdb) p width
$4 = 13
(gdb) set width=47
Invalid syntax in expression.
The invalid expression, of course, is
=47
. In order to actually set the program’s variable
width
, use
(gdb) set var width=47
Because the
set
command has many subcommands that can conflict with the names of program
variables, it is a good idea to use the
set variable
command instead of just
set
. For example, if
your program has a variable
g
, you run into problems if you try to set a new value with just
set g=4
,
because gdb has the command
set gnutarget
, abbreviated
set g
:
(gdb) whatis g
type = double
(gdb) p g
Summary of Contents for ENTERPRISE LINUX 4 - DEVELOPER TOOLS GUIDE
Page 1: ...Red Hat Enterprise Linux 4 Debugging with gdb ...
Page 12: ...2 Chapter 1 Debugging with gdb ...
Page 28: ...18 Chapter 4 Getting In and Out of gdb ...
Page 34: ...24 Chapter 5 gdb Commands ...
Page 44: ...34 Chapter 6 Running Programs Under gdb ...
Page 68: ...58 Chapter 8 Examining the Stack ...
Page 98: ...88 Chapter 10 Examining Data ...
Page 112: ...102 Chapter 12 Tracepoints ...
Page 118: ...108 Chapter 13 Debugging Programs That Use Overlays ...
Page 138: ...128 Chapter 14 Using gdb with Different Languages ...
Page 144: ...134 Chapter 15 Examining the Symbol Table ...
Page 170: ...160 Chapter 19 Debugging remote programs ...
Page 198: ...188 Chapter 21 Controlling gdb ...
Page 204: ...194 Chapter 22 Canned Sequences of Commands ...
Page 206: ...196 Chapter 23 Command Interpreters ...
Page 216: ...206 Chapter 25 Using gdb under gnu Emacs ...
Page 296: ...286 Chapter 27 gdb Annotations ...
Page 300: ...290 Chapter 28 Reporting Bugs in gdb ...
Page 322: ...312 Chapter 30 Using History Interactively ...
Page 362: ...352 Appendix D gdb Remote Serial Protocol ...
Page 380: ...370 Appendix F GNU GENERAL PUBLIC LICENSE ...
Page 386: ...376 Appendix G GNU Free Documentation License ...
Page 410: ......