| <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-2019 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> |
| </head> |
| <body> |
| <div class="node"> |
| <a name="Assignment"></a> |
| <p> |
| Next: <a rel="next" accesskey="n" href="Jumping.html#Jumping">Jumping</a>, |
| Up: <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-1164"></a><a name="index-setting-variables-1165"></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-1166"></a><a name="index-variables_002c-setting-1167"></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 ‘<samp><span class="samp">set width=13</span></samp>’, 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 ‘<samp><span class="samp">=47</span></samp>’. 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 ‘<samp><span class="samp">set g=4</span></samp>’, 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 ‘<samp><span class="samp">{...}</span></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 |
| |
| <pre class="smallexample"> set {int}0x83040 = 4 |
| </pre> |
| <p class="noindent">stores the value 4 into that memory location. |
| |
| </body></html> |
| |