blob: 9ad176aa3f08146b51039345ac4d4cbdb4ccb671 [file] [log] [blame]
<html lang="en">
<head>
<title>Assignment - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Altering.html#Altering" title="Altering">
<link rel="next" href="Jumping.html#Jumping" title="Jumping">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.
(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
this GNU Manual. Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Assignment"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Jumping.html#Jumping">Jumping</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Altering.html#Altering">Altering</a>
<hr>
</div>
<h3 class="section">17.1 Assignment to Variables</h3>
<p><a name="index-assignment-924"></a><a name="index-setting-variables-925"></a>To alter the value of a variable, evaluate an assignment expression.
See <a href="Expressions.html#Expressions">Expressions</a>. For example,
<pre class="smallexample"> print x=4
</pre>
<p class="noindent">stores the value 4 into the variable <code>x</code>, and then prints the
value of the assignment expression (which is 4).
See <a href="Languages.html#Languages">Using <span class="sc">gdb</span> with Different Languages</a>, for more
information on operators in supported languages.
<p><a name="index-set-variable-926"></a><a name="index-variables_002c-setting-927"></a>If you are not interested in seeing the value of the assignment, use the
<code>set</code> command instead of the <code>print</code> command. <code>set</code> is
really the same as <code>print</code> except that the expression's value is
not printed and is not put in the value history (see <a href="Value-History.html#Value-History">Value History</a>). The expression is evaluated only for its effects.
<p>If the beginning of the argument string of the <code>set</code> command
appears identical to a <code>set</code> subcommand, use the <code>set
variable</code> command instead of just <code>set</code>. This command is identical
to <code>set</code> except for its lack of subcommands. For example, if your
program has a variable <code>width</code>, you get an error if you try to set
a new value with just &lsquo;<samp><span class="samp">set width=13</span></samp>&rsquo;, because <span class="sc">gdb</span> has the
command <code>set width</code>:
<pre class="smallexample"> (gdb) whatis width
type = double
(gdb) p width
$4 = 13
(gdb) set width=47
Invalid syntax in expression.
</pre>
<p class="noindent">The invalid expression, of course, is &lsquo;<samp><span class="samp">=47</span></samp>&rsquo;. In
order to actually set the program's variable <code>width</code>, use
<pre class="smallexample"> (gdb) set var width=47
</pre>
<p>Because the <code>set</code> command has many subcommands that can conflict
with the names of program variables, it is a good idea to use the
<code>set variable</code> command instead of just <code>set</code>. For example, if
your program has a variable <code>g</code>, you run into problems if you try
to set a new value with just &lsquo;<samp><span class="samp">set g=4</span></samp>&rsquo;, because <span class="sc">gdb</span> has
the command <code>set gnutarget</code>, abbreviated <code>set g</code>:
<pre class="smallexample"> (gdb) whatis g
type = double
(gdb) p g
$1 = 1
(gdb) set g=4
(gdb) p g
$2 = 1
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/smith/cc_progs/a.out
"/home/smith/cc_progs/a.out": can't open to read symbols:
Invalid bfd target.
(gdb) show g
The current BFD target is "=4".
</pre>
<p class="noindent">The program variable <code>g</code> did not change, and you silently set the
<code>gnutarget</code> to an invalid value. In order to set the variable
<code>g</code>, use
<pre class="smallexample"> (gdb) set var g=4
</pre>
<p><span class="sc">gdb</span> allows more implicit conversions in assignments than C; you can
freely store an integer value into a pointer variable or vice versa,
and you can convert any structure to any other structure that is the
same length or shorter.
<!-- FIXME: how do structs align/pad in these conversions? -->
<!-- /doc@cygnus.com 18dec1990 -->
<p>To store values into arbitrary places in memory, use the &lsquo;<samp><span class="samp">{...}</span></samp>&rsquo;
construct to generate a value of specified type at a specified address
(see <a href="Expressions.html#Expressions">Expressions</a>). For example, <code>{int}0x83040</code> refers
to memory location <code>0x83040</code> as an integer (which implies a certain size
and representation in memory), and
<pre class="smallexample"> set {int}0x83040 = 4
</pre>
<p class="noindent">stores the value 4 into that memory location.
</body></html>