| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <html> |
| <!-- Copyright (C) 1988-2015 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." --> |
| <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ --> |
| <head> |
| <title>Debugging with GDB: Assignment</title> |
| |
| <meta name="description" content="Debugging with GDB: Assignment"> |
| <meta name="keywords" content="Debugging with GDB: Assignment"> |
| <meta name="resource-type" content="document"> |
| <meta name="distribution" content="global"> |
| <meta name="Generator" content="makeinfo"> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <link href="index.html#Top" rel="start" title="Top"> |
| <link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index"> |
| <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents"> |
| <link href="Altering.html#Altering" rel="up" title="Altering"> |
| <link href="Jumping.html#Jumping" rel="next" title="Jumping"> |
| <link href="Altering.html#Altering" rel="prev" title="Altering"> |
| <style type="text/css"> |
| <!-- |
| a.summary-letter {text-decoration: none} |
| blockquote.smallquotation {font-size: smaller} |
| div.display {margin-left: 3.2em} |
| div.example {margin-left: 3.2em} |
| div.indentedblock {margin-left: 3.2em} |
| div.lisp {margin-left: 3.2em} |
| div.smalldisplay {margin-left: 3.2em} |
| div.smallexample {margin-left: 3.2em} |
| div.smallindentedblock {margin-left: 3.2em; font-size: smaller} |
| div.smalllisp {margin-left: 3.2em} |
| kbd {font-style:oblique} |
| pre.display {font-family: inherit} |
| pre.format {font-family: inherit} |
| pre.menu-comment {font-family: serif} |
| pre.menu-preformatted {font-family: serif} |
| pre.smalldisplay {font-family: inherit; font-size: smaller} |
| pre.smallexample {font-size: smaller} |
| pre.smallformat {font-family: inherit; font-size: smaller} |
| pre.smalllisp {font-size: smaller} |
| span.nocodebreak {white-space:nowrap} |
| span.nolinebreak {white-space:nowrap} |
| span.roman {font-family:serif; font-weight:normal} |
| span.sansserif {font-family:sans-serif; font-weight:normal} |
| ul.no-bullet {list-style: none} |
| --> |
| </style> |
| |
| |
| </head> |
| |
| <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> |
| <a name="Assignment"></a> |
| <div class="header"> |
| <p> |
| Next: <a href="Jumping.html#Jumping" accesskey="n" rel="next">Jumping</a>, Up: <a href="Altering.html#Altering" accesskey="u" rel="up">Altering</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p> |
| </div> |
| <hr> |
| <a name="Assignment-to-Variables"></a> |
| <h3 class="section">17.1 Assignment to Variables</h3> |
| |
| <a name="index-assignment"></a> |
| <a name="index-setting-variables"></a> |
| <p>To alter the value of a variable, evaluate an assignment expression. |
| See <a href="Expressions.html#Expressions">Expressions</a>. For example, |
| </p> |
| <div class="smallexample"> |
| <pre class="smallexample">print x=4 |
| </pre></div> |
| |
| <p>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 <small>GDB</small> with Different Languages</a>, for more |
| information on operators in supported languages. |
| </p> |
| <a name="index-set-variable"></a> |
| <a name="index-variables_002c-setting"></a> |
| <p>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> |
| <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 ‘<samp>set width=13</samp>’, because <small>GDB</small> has the |
| command <code>set width</code>: |
| </p> |
| <div class="smallexample"> |
| <pre class="smallexample">(gdb) whatis width |
| type = double |
| (gdb) p width |
| $4 = 13 |
| (gdb) set width=47 |
| Invalid syntax in expression. |
| </pre></div> |
| |
| <p>The invalid expression, of course, is ‘<samp>=47</samp>’. In |
| order to actually set the program’s variable <code>width</code>, use |
| </p> |
| <div class="smallexample"> |
| <pre class="smallexample">(gdb) set var width=47 |
| </pre></div> |
| |
| <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 ‘<samp>set g=4</samp>’, because <small>GDB</small> has |
| the command <code>set gnutarget</code>, abbreviated <code>set g</code>: |
| </p> |
| <div class="smallexample"> |
| <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></div> |
| |
| <p>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 |
| </p> |
| <div class="smallexample"> |
| <pre class="smallexample">(gdb) set var g=4 |
| </pre></div> |
| |
| <p><small>GDB</small> 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. |
| </p> |
| <p>To store values into arbitrary places in memory, use the ‘<samp>{…}</samp>’ |
| 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 |
| </p> |
| <div class="smallexample"> |
| <pre class="smallexample">set {int}0x83040 = 4 |
| </pre></div> |
| |
| <p>stores the value 4 into that memory location. |
| </p> |
| <hr> |
| <div class="header"> |
| <p> |
| Next: <a href="Jumping.html#Jumping" accesskey="n" rel="next">Jumping</a>, Up: <a href="Altering.html#Altering" accesskey="u" rel="up">Altering</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p> |
| </div> |
| |
| |
| |
| </body> |
| </html> |