813 lines
		
	
	
	
		
			36 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			813 lines
		
	
	
	
		
			36 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<HTML>
 | 
						|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 | 
						|
<!-- Created on March, 27  2008 by texi2html 1.64 -->
 | 
						|
<!-- 
 | 
						|
Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
 | 
						|
            Karl Berry  <karl@freefriends.org>
 | 
						|
            Olaf Bachmann <obachman@mathematik.uni-kl.de>
 | 
						|
            and many others.
 | 
						|
Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
 | 
						|
Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
 | 
						|
 
 | 
						|
-->
 | 
						|
<HEAD>
 | 
						|
<TITLE>Debugging with GDB: Source</TITLE>
 | 
						|
 | 
						|
<META NAME="description" CONTENT="Debugging with GDB: Source">
 | 
						|
<META NAME="keywords" CONTENT="Debugging with GDB: Source">
 | 
						|
<META NAME="resource-type" CONTENT="document">
 | 
						|
<META NAME="distribution" CONTENT="global">
 | 
						|
<META NAME="Generator" CONTENT="texi2html 1.64">
 | 
						|
 | 
						|
</HEAD>
 | 
						|
 | 
						|
<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
 | 
						|
 | 
						|
<A NAME="SEC51"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_7.html#SEC50"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC52"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H1> 7. Examining Source Files </H1>
 | 
						|
<!--docid::SEC51::-->
 | 
						|
<P>
 | 
						|
 | 
						|
GDB can print parts of your program's source, since the debugging
 | 
						|
information recorded in the program tells GDB what source files were
 | 
						|
used to build it.  When your program stops, GDB spontaneously prints
 | 
						|
the line where it stopped.  Likewise, when you select a stack frame
 | 
						|
(see section <A HREF="gdb_7.html#SEC49">Selecting a Frame</A>), GDB prints the line where
 | 
						|
execution in that frame has stopped.  You can print other portions of
 | 
						|
source files by explicit command.
 | 
						|
</P><P>
 | 
						|
 | 
						|
If you use GDB through its GNU Emacs interface, you may
 | 
						|
prefer to use Emacs facilities to view source; see <A HREF="gdb_24.html#SEC241">Using GDB under GNU Emacs</A>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_8.html#SEC52">7.1 Printing Source Lines</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Printing source lines</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_8.html#SEC53">7.2 Specifying a Location</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">How to specify code locations</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_8.html#SEC54">7.3 Editing Source Files</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Editing source files</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_8.html#SEC56">7.4 Searching Source Files</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Searching source files</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_8.html#SEC57">7.5 Specifying Source Directories</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Specifying source directories</TD></TR>
 | 
						|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_8.html#SEC58">7.6 Source and Machine Code</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP">Source and machine code</TD></TR>
 | 
						|
</TABLE></BLOCKQUOTE>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="List"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC52"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC53"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 7.1 Printing Source Lines </H2>
 | 
						|
<!--docid::SEC52::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX326"></A>
 | 
						|
<A NAME="IDX327"></A>
 | 
						|
To print lines from a source file, use the <CODE>list</CODE> command
 | 
						|
(abbreviated <CODE>l</CODE>).  By default, ten lines are printed.
 | 
						|
There are several ways to specify what part of the file you want to
 | 
						|
print; see <A HREF="gdb_8.html#SEC53">7.2 Specifying a Location</A>, for the full list.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Here are the forms of the <CODE>list</CODE> command most commonly used:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>list <VAR>linenum</VAR></CODE>
 | 
						|
<DD>Print lines centered around line number <VAR>linenum</VAR> in the
 | 
						|
current source file.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>list <VAR>function</VAR></CODE>
 | 
						|
<DD>Print lines centered around the beginning of function
 | 
						|
<VAR>function</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>list</CODE>
 | 
						|
<DD>Print more lines.  If the last lines printed were printed with a
 | 
						|
<CODE>list</CODE> command, this prints lines following the last lines
 | 
						|
printed; however, if the last line printed was a solitary line printed
 | 
						|
as part of displaying a stack frame (see section <A HREF="gdb_7.html#SEC46">Examining the Stack</A>), this prints lines centered around that line.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>list -</CODE>
 | 
						|
<DD>Print lines just before the lines last printed.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX328"></A>
 | 
						|
By default, GDB prints ten source lines with any of these forms of
 | 
						|
the <CODE>list</CODE> command.  You can change this using <CODE>set listsize</CODE>:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX329"></A>
 | 
						|
<DT><CODE>set listsize <VAR>count</VAR></CODE>
 | 
						|
<DD>Make the <CODE>list</CODE> command display <VAR>count</VAR> source lines (unless
 | 
						|
the <CODE>list</CODE> argument explicitly specifies some other number).
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX330"></A>
 | 
						|
<DT><CODE>show listsize</CODE>
 | 
						|
<DD>Display the number of lines that <CODE>list</CODE> prints.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
Repeating a <CODE>list</CODE> command with <KBD>RET</KBD> discards the argument,
 | 
						|
so it is equivalent to typing just <CODE>list</CODE>.  This is more useful
 | 
						|
than listing the same lines again.  An exception is made for an
 | 
						|
argument of <SAMP>`-'</SAMP>; that argument is preserved in repetition so that
 | 
						|
each repetition moves up in the source file.
 | 
						|
</P><P>
 | 
						|
 | 
						|
In general, the <CODE>list</CODE> command expects you to supply zero, one or two
 | 
						|
<EM>linespecs</EM>.  Linespecs specify source lines; there are several ways
 | 
						|
of writing them (see section <A HREF="gdb_8.html#SEC53">7.2 Specifying a Location</A>), but the effect is always
 | 
						|
to specify some source line.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Here is a complete description of the possible arguments for <CODE>list</CODE>:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>list <VAR>linespec</VAR></CODE>
 | 
						|
<DD>Print lines centered around the line specified by <VAR>linespec</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>list <VAR>first</VAR>,<VAR>last</VAR></CODE>
 | 
						|
<DD>Print lines from <VAR>first</VAR> to <VAR>last</VAR>.  Both arguments are
 | 
						|
linespecs.  When a <CODE>list</CODE> command has two linespecs, and the
 | 
						|
source file of the second linespec is omitted, this refers to
 | 
						|
the same source file as the first linespec.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>list ,<VAR>last</VAR></CODE>
 | 
						|
<DD>Print lines ending with <VAR>last</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>list <VAR>first</VAR>,</CODE>
 | 
						|
<DD>Print lines starting with <VAR>first</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>list +</CODE>
 | 
						|
<DD>Print lines just after the lines last printed.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>list -</CODE>
 | 
						|
<DD>Print lines just before the lines last printed.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>list</CODE>
 | 
						|
<DD>As described in the preceding table.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Specify Location"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC53"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC52"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC54"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC54"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 7.2 Specifying a Location </H2>
 | 
						|
<!--docid::SEC53::-->
 | 
						|
<P>
 | 
						|
 | 
						|
Several GDB commands accept arguments that specify a location
 | 
						|
of your program's code.  Since GDB is a source-level
 | 
						|
debugger, a location usually specifies some line in the source code;
 | 
						|
for that reason, locations are also known as <EM>linespecs</EM>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Here are all the different ways of specifying a code location that
 | 
						|
GDB understands:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE><VAR>linenum</VAR></CODE>
 | 
						|
<DD>Specifies the line number <VAR>linenum</VAR> of the current source file.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>-<VAR>offset</VAR></CODE>
 | 
						|
<DD><DT><CODE>+<VAR>offset</VAR></CODE>
 | 
						|
<DD>Specifies the line <VAR>offset</VAR> lines before or after the <EM>current
 | 
						|
line</EM>.  For the <CODE>list</CODE> command, the current line is the last one
 | 
						|
printed; for the breakpoint commands, this is the line at which
 | 
						|
execution stopped in the currently selected <EM>stack frame</EM>
 | 
						|
(see section <A HREF="gdb_7.html#SEC47">Frames</A>, for a description of stack frames.)  When
 | 
						|
used as the second of the two linespecs in a <CODE>list</CODE> command,
 | 
						|
this specifies the line <VAR>offset</VAR> lines up or down from the first
 | 
						|
linespec.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE><VAR>filename</VAR>:<VAR>linenum</VAR></CODE>
 | 
						|
<DD>Specifies the line <VAR>linenum</VAR> in the source file <VAR>filename</VAR>.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE><VAR>function</VAR></CODE>
 | 
						|
<DD>Specifies the line that begins the body of the function <VAR>function</VAR>.
 | 
						|
For example, in C, this is the line with the open brace.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE><VAR>filename</VAR>:<VAR>function</VAR></CODE>
 | 
						|
<DD>Specifies the line that begins the body of the function <VAR>function</VAR>
 | 
						|
in the file <VAR>filename</VAR>.  You only need the file name with a
 | 
						|
function name to avoid ambiguity when there are identically named
 | 
						|
functions in different source files.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>*<VAR>address</VAR></CODE>
 | 
						|
<DD>Specifies the program address <VAR>address</VAR>.  For line-oriented
 | 
						|
commands, such as <CODE>list</CODE> and <CODE>edit</CODE>, this specifies a source
 | 
						|
line that contains <VAR>address</VAR>.  For <CODE>break</CODE> and other
 | 
						|
breakpoint oriented commands, this can be used to set breakpoints in
 | 
						|
parts of your program which do not have debugging information or
 | 
						|
source files.
 | 
						|
<P>
 | 
						|
 | 
						|
Here <VAR>address</VAR> may be any expression valid in the current working
 | 
						|
language (see section <A HREF="gdb_13.html#SEC102">working language</A>) that specifies a code
 | 
						|
address.  In addition, as a convenience, GDB extends the
 | 
						|
semantics of expressions used in locations to cover the situations
 | 
						|
that frequently happen during debugging.  Here are the various forms
 | 
						|
of <VAR>address</VAR>:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE><VAR>expression</VAR></CODE>
 | 
						|
<DD>Any expression valid in the current working language.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE><VAR>funcaddr</VAR></CODE>
 | 
						|
<DD>An address of a function or procedure derived from its name.  In C,
 | 
						|
C<TT>++</TT>, Java, Objective-C, Fortran, minimal, and assembly, this is
 | 
						|
simply the function's name <VAR>function</VAR> (and actually a special case
 | 
						|
of a valid expression).  In Pascal and Modula-2, this is
 | 
						|
<CODE>&<VAR>function</VAR></CODE>.  In Ada, this is <CODE><VAR>function</VAR>'Address</CODE>
 | 
						|
(although the Pascal form also works).
 | 
						|
<P>
 | 
						|
 | 
						|
This form specifies the address of the function's first instruction,
 | 
						|
before the stack frame and arguments have been set up.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>'<VAR>filename</VAR>'::<VAR>funcaddr</VAR></CODE>
 | 
						|
<DD>Like <VAR>funcaddr</VAR> above, but also specifies the name of the source
 | 
						|
file explicitly.  This is useful if the name of the function does not
 | 
						|
specify the function unambiguously, e.g., if there are several
 | 
						|
functions with identical names in different source files.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Edit"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC54"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC53"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC55"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC56"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC56"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 7.3 Editing Source Files </H2>
 | 
						|
<!--docid::SEC54::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX331"></A>
 | 
						|
<A NAME="IDX332"></A>
 | 
						|
To edit the lines in a source file, use the <CODE>edit</CODE> command.
 | 
						|
The editing program of your choice
 | 
						|
is invoked with the current line set to
 | 
						|
the active line in the program.
 | 
						|
Alternatively, there are several ways to specify what part of the file you
 | 
						|
want to print if you want to see other parts of the program:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>edit <VAR>location</VAR></CODE>
 | 
						|
<DD>Edit the source file specified by <CODE>location</CODE>.  Editing starts at
 | 
						|
that <VAR>location</VAR>, e.g., at the specified source line of the
 | 
						|
specified file.  See section <A HREF="gdb_8.html#SEC53">7.2 Specifying a Location</A>, for all the possible forms
 | 
						|
of the <VAR>location</VAR> argument; here are the forms of the <CODE>edit</CODE>
 | 
						|
command most commonly used:
 | 
						|
<P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>edit <VAR>number</VAR></CODE>
 | 
						|
<DD>Edit the current source file with <VAR>number</VAR> as the active line number.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>edit <VAR>function</VAR></CODE>
 | 
						|
<DD>Edit the file containing <VAR>function</VAR> at the beginning of its definition.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC55"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC54"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC56"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC56"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC54"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC56"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H3> 7.3.1 Choosing your Editor </H3>
 | 
						|
<!--docid::SEC55::-->
 | 
						|
You can customize GDB to use any editor you want
 | 
						|
<A NAME="DOCF4" HREF="gdb_fot.html#FOOT4">(4)</A>.
 | 
						|
By default, it is <TT>`/bin/ex'</TT>, but you can change this
 | 
						|
by setting the environment variable <CODE>EDITOR</CODE> before using
 | 
						|
GDB.  For example, to configure GDB to use the
 | 
						|
<CODE>vi</CODE> editor, you could use these commands with the <CODE>sh</CODE> shell:
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>EDITOR=/usr/bin/vi
 | 
						|
export EDITOR
 | 
						|
gdb <small>...</small>
 | 
						|
</FONT></pre></td></tr></table>or in the <CODE>csh</CODE> shell,
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>setenv EDITOR /usr/bin/vi
 | 
						|
gdb <small>...</small>
 | 
						|
</FONT></pre></td></tr></table><P>
 | 
						|
 | 
						|
<A NAME="Search"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC56"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC55"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC57"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC57"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 7.4 Searching Source Files </H2>
 | 
						|
<!--docid::SEC56::-->
 | 
						|
<P>
 | 
						|
 | 
						|
There are two commands for searching through the current source file for a
 | 
						|
regular expression.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX333"></A>
 | 
						|
<A NAME="IDX334"></A>
 | 
						|
<DT><CODE>forward-search <VAR>regexp</VAR></CODE>
 | 
						|
<DD><DT><CODE>search <VAR>regexp</VAR></CODE>
 | 
						|
<DD>The command <SAMP>`forward-search <VAR>regexp</VAR>'</SAMP> checks each line,
 | 
						|
starting with the one following the last line listed, for a match for
 | 
						|
<VAR>regexp</VAR>.  It lists the line that is found.  You can use the
 | 
						|
synonym <SAMP>`search <VAR>regexp</VAR>'</SAMP> or abbreviate the command name as
 | 
						|
<CODE>fo</CODE>.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX335"></A>
 | 
						|
<DT><CODE>reverse-search <VAR>regexp</VAR></CODE>
 | 
						|
<DD>The command <SAMP>`reverse-search <VAR>regexp</VAR>'</SAMP> checks each line, starting
 | 
						|
with the one before the last line listed and going backward, for a match
 | 
						|
for <VAR>regexp</VAR>.  It lists the line that is found.  You can abbreviate
 | 
						|
this command as <CODE>rev</CODE>.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Source Path"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC57"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC56"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC58"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC58"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 7.5 Specifying Source Directories </H2>
 | 
						|
<!--docid::SEC57::-->
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX336"></A>
 | 
						|
<A NAME="IDX337"></A>
 | 
						|
Executable programs sometimes do not record the directories of the source
 | 
						|
files from which they were compiled, just the names.  Even when they do,
 | 
						|
the directories could be moved between the compilation and your debugging
 | 
						|
session.  GDB has a list of directories to search for source files;
 | 
						|
this is called the <EM>source path</EM>.  Each time GDB wants a source file,
 | 
						|
it tries all the directories in the list, in the order they are present
 | 
						|
in the list, until it finds a file with the desired name.
 | 
						|
</P><P>
 | 
						|
 | 
						|
For example, suppose an executable references the file
 | 
						|
<TT>`/usr/src/foo-1.0/lib/foo.c'</TT>, and our source path is
 | 
						|
<TT>`/mnt/cross'</TT>.  The file is first looked up literally; if this
 | 
						|
fails, <TT>`/mnt/cross/usr/src/foo-1.0/lib/foo.c'</TT> is tried; if this
 | 
						|
fails, <TT>`/mnt/cross/foo.c'</TT> is opened; if this fails, an error
 | 
						|
message is printed.  GDB does not look up the parts of the
 | 
						|
source file name, such as <TT>`/mnt/cross/src/foo-1.0/lib/foo.c'</TT>.
 | 
						|
Likewise, the subdirectories of the source path are not searched: if
 | 
						|
the source path is <TT>`/mnt/cross'</TT>, and the binary refers to
 | 
						|
<TT>`foo.c'</TT>, GDB would not find it under
 | 
						|
<TT>`/mnt/cross/usr/src/foo-1.0/lib'</TT>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Plain file names, relative file names with leading directories, file
 | 
						|
names containing dots, etc. are all treated as described above; for
 | 
						|
instance, if the source path is <TT>`/mnt/cross'</TT>, and the source file
 | 
						|
is recorded as <TT>`../lib/foo.c'</TT>, GDB would first try
 | 
						|
<TT>`../lib/foo.c'</TT>, then <TT>`/mnt/cross/../lib/foo.c'</TT>, and after
 | 
						|
that---<TT>`/mnt/cross/foo.c'</TT>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Note that the executable search path is <EM>not</EM> used to locate the
 | 
						|
source files.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Whenever you reset or rearrange the source path, GDB clears out
 | 
						|
any information it has cached about where source files are found and where
 | 
						|
each line is in the file.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX338"></A>
 | 
						|
<A NAME="IDX339"></A>
 | 
						|
When you start GDB, its source path includes only <SAMP>`cdir'</SAMP>
 | 
						|
and <SAMP>`cwd'</SAMP>, in that order.
 | 
						|
To add other directories, use the <CODE>directory</CODE> command.
 | 
						|
</P><P>
 | 
						|
 | 
						|
The search path is used to find both program source files and GDB
 | 
						|
script files (read using the <SAMP>`-command'</SAMP> option and <SAMP>`source'</SAMP> command).
 | 
						|
</P><P>
 | 
						|
 | 
						|
In addition to the source path, GDB provides a set of commands
 | 
						|
that manage a list of source path substitution rules.  A <EM>substitution
 | 
						|
rule</EM> specifies how to rewrite source directories stored in the program's
 | 
						|
debug information in case the sources were moved to a different
 | 
						|
directory between compilation and debugging.  A rule is made of
 | 
						|
two strings, the first specifying what needs to be rewritten in
 | 
						|
the path, and the second specifying how it should be rewritten.
 | 
						|
In  <A HREF="gdb_8.html#set substitute-path">set substitute-path</A>, we name these two parts <VAR>from</VAR> and
 | 
						|
<VAR>to</VAR> respectively.  GDB does a simple string replacement
 | 
						|
of <VAR>from</VAR> with <VAR>to</VAR> at the start of the directory part of the
 | 
						|
source file name, and uses that result instead of the original file
 | 
						|
name to look up the sources.
 | 
						|
</P><P>
 | 
						|
 | 
						|
Using the previous example, suppose the <TT>`foo-1.0'</TT> tree has been
 | 
						|
moved from <TT>`/usr/src'</TT> to <TT>`/mnt/cross'</TT>, then you can tell
 | 
						|
GDB to replace <TT>`/usr/src'</TT> in all source path names with
 | 
						|
<TT>`/mnt/cross'</TT>.  The first lookup will then be
 | 
						|
<TT>`/mnt/cross/foo-1.0/lib/foo.c'</TT> in place of the original location
 | 
						|
of <TT>`/usr/src/foo-1.0/lib/foo.c'</TT>.  To define a source path
 | 
						|
substitution rule, use the <CODE>set substitute-path</CODE> command
 | 
						|
(see  <A HREF="gdb_8.html#set substitute-path">set substitute-path</A>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
To avoid unexpected substitution results, a rule is applied only if the
 | 
						|
<VAR>from</VAR> part of the directory name ends at a directory separator.
 | 
						|
For instance, a rule substituting  <TT>`/usr/source'</TT> into
 | 
						|
<TT>`/mnt/cross'</TT> will be applied to <TT>`/usr/source/foo-1.0'</TT> but
 | 
						|
not to <TT>`/usr/sourceware/foo-2.0'</TT>.  And because the substitution
 | 
						|
is applied only at the beginning of the directory name, this rule will
 | 
						|
not be applied to <TT>`/root/usr/source/baz.c'</TT> either.
 | 
						|
</P><P>
 | 
						|
 | 
						|
In many cases, you can achieve the same result using the <CODE>directory</CODE>
 | 
						|
command.  However, <CODE>set substitute-path</CODE> can be more efficient in
 | 
						|
the case where the sources are organized in a complex tree with multiple
 | 
						|
subdirectories.  With the <CODE>directory</CODE> command, you need to add each
 | 
						|
subdirectory of your project.  If you moved the entire tree while
 | 
						|
preserving its internal organization, then <CODE>set substitute-path</CODE>
 | 
						|
allows you to direct the debugger to all the sources with one single
 | 
						|
command.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<CODE>set substitute-path</CODE> is also more than just a shortcut command.
 | 
						|
The source path is only used if the file at the original location no
 | 
						|
longer exists.  On the other hand, <CODE>set substitute-path</CODE> modifies
 | 
						|
the debugger behavior to look at the rewritten location instead.  So, if
 | 
						|
for any reason a source file that is not relevant to your executable is
 | 
						|
located at the original location, a substitution rule is the only
 | 
						|
method available to point GDB at the new location.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<DT><CODE>directory <VAR>dirname</VAR> <small>...</small></CODE>
 | 
						|
<DD><DT><CODE>dir <VAR>dirname</VAR> <small>...</small></CODE>
 | 
						|
<DD>Add directory <VAR>dirname</VAR> to the front of the source path.  Several
 | 
						|
directory names may be given to this command, separated by <SAMP>`:'</SAMP>
 | 
						|
(<SAMP>`;'</SAMP> on MS-DOS and MS-Windows, where <SAMP>`:'</SAMP> usually appears as
 | 
						|
part of absolute file names) or
 | 
						|
whitespace.  You may specify a directory that is already in the source
 | 
						|
path; this moves it forward, so GDB searches it sooner.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="IDX340"></A>
 | 
						|
<A NAME="IDX341"></A>
 | 
						|
<A NAME="IDX342"></A>
 | 
						|
<A NAME="IDX343"></A>
 | 
						|
<A NAME="IDX344"></A>
 | 
						|
<A NAME="IDX345"></A>
 | 
						|
<A NAME="IDX346"></A>
 | 
						|
<A NAME="IDX347"></A>
 | 
						|
<A NAME="IDX348"></A>
 | 
						|
You can use the string <SAMP>`$cdir'</SAMP> to refer to the compilation
 | 
						|
directory (if one is recorded), and <SAMP>`$cwd'</SAMP> to refer to the current
 | 
						|
working directory.  <SAMP>`$cwd'</SAMP> is not the same as <SAMP>`.'</SAMP>---the former
 | 
						|
tracks the current working directory as it changes during your GDB
 | 
						|
session, while the latter is immediately expanded to the current
 | 
						|
directory at the time you add an entry to the source path.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>directory</CODE>
 | 
						|
<DD>Reset the source path to its default value (<SAMP>`$cdir:$cwd'</SAMP> on Unix systems).  This requires confirmation.
 | 
						|
<P>
 | 
						|
 | 
						|
<DT><CODE>show directories</CODE>
 | 
						|
<DD><A NAME="IDX349"></A>
 | 
						|
Print the source path: show which directories it contains.
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="set substitute-path"></A>
 | 
						|
<DT><CODE>set substitute-path <VAR>from</VAR> <VAR>to</VAR></CODE>
 | 
						|
<DD><A NAME="IDX350"></A>
 | 
						|
Define a source path substitution rule, and add it at the end of the
 | 
						|
current list of existing substitution rules.  If a rule with the same
 | 
						|
<VAR>from</VAR> was already defined, then the old rule is also deleted.
 | 
						|
<P>
 | 
						|
 | 
						|
For example, if the file <TT>`/foo/bar/baz.c'</TT> was moved to
 | 
						|
<TT>`/mnt/cross/baz.c'</TT>, then the command
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) set substitute-path /usr/src /mnt/cross
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
will tell GDB to replace <SAMP>`/usr/src'</SAMP> with
 | 
						|
<SAMP>`/mnt/cross'</SAMP>, which will allow GDB to find the file
 | 
						|
<TT>`baz.c'</TT> even though it was moved.
 | 
						|
</P><P>
 | 
						|
 | 
						|
In the case when more than one substitution rule have been defined,
 | 
						|
the rules are evaluated one by one in the order where they have been
 | 
						|
defined.  The first one matching, if any, is selected to perform
 | 
						|
the substitution.
 | 
						|
</P><P>
 | 
						|
 | 
						|
For instance, if we had entered the following commands:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) set substitute-path /usr/src/include /mnt/include
 | 
						|
(gdb) set substitute-path /usr/src /mnt/src
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
GDB would then rewrite <TT>`/usr/src/include/defs.h'</TT> into
 | 
						|
<TT>`/mnt/include/defs.h'</TT> by using the first rule.  However, it would
 | 
						|
use the second rule to rewrite <TT>`/usr/src/lib/foo.c'</TT> into
 | 
						|
<TT>`/mnt/src/lib/foo.c'</TT>.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>unset substitute-path [path]</CODE>
 | 
						|
<DD><A NAME="IDX351"></A>
 | 
						|
If a path is specified, search the current list of substitution rules
 | 
						|
for a rule that would rewrite that path.  Delete that rule if found.
 | 
						|
A warning is emitted by the debugger if no rule could be found.
 | 
						|
<P>
 | 
						|
 | 
						|
If no path is specified, then all substitution rules are deleted.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DT><CODE>show substitute-path [path]</CODE>
 | 
						|
<DD><A NAME="IDX352"></A>
 | 
						|
If a path is specified, then print the source path substitution rule
 | 
						|
which would rewrite that path, if any.
 | 
						|
<P>
 | 
						|
 | 
						|
If no path is specified, then print all existing source path substitution
 | 
						|
rules.
 | 
						|
</P><P>
 | 
						|
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
If your source path is cluttered with directories that are no longer of
 | 
						|
interest, GDB may sometimes cause confusion by finding the wrong
 | 
						|
versions of source.  You can correct the situation as follows:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<OL>
 | 
						|
<LI>
 | 
						|
Use <CODE>directory</CODE> with no argument to reset the source path to its default value.
 | 
						|
<P>
 | 
						|
 | 
						|
<LI>
 | 
						|
Use <CODE>directory</CODE> with suitable arguments to reinstall the
 | 
						|
directories you want in the source path.  You can add all the
 | 
						|
directories in one command.
 | 
						|
</OL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Machine Code"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<A NAME="SEC58"></A>
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC57"> < </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> > </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> Up </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<H2> 7.6 Source and Machine Code </H2>
 | 
						|
<!--docid::SEC58::-->
 | 
						|
<P>
 | 
						|
 | 
						|
You can use the command <CODE>info line</CODE> to map source lines to program
 | 
						|
addresses (and vice versa), and the command <CODE>disassemble</CODE> to display
 | 
						|
a range of addresses as machine instructions.  When run under GNU Emacs
 | 
						|
mode, the <CODE>info line</CODE> command causes the arrow to point to the
 | 
						|
line specified.  Also, <CODE>info line</CODE> prints addresses in symbolic form as
 | 
						|
well as hex.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX353"></A>
 | 
						|
<DT><CODE>info line <VAR>linespec</VAR></CODE>
 | 
						|
<DD>Print the starting and ending addresses of the compiled code for
 | 
						|
source line <VAR>linespec</VAR>.  You can specify source lines in any of
 | 
						|
the ways documented in <A HREF="gdb_8.html#SEC53">7.2 Specifying a Location</A>.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
For example, we can use <CODE>info line</CODE> to discover the location of
 | 
						|
the object code for the first line of function
 | 
						|
<CODE>m4_changequote</CODE>:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) info line m4_changequote
 | 
						|
Line 895 of "builtin.c" starts at pc 0x634c and ends at 0x6350.
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<A NAME="IDX354"></A>
 | 
						|
We can also inquire (using <CODE>*<VAR>addr</VAR></CODE> as the form for
 | 
						|
<VAR>linespec</VAR>) what source line covers a particular address:
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) info line *0x63ff
 | 
						|
Line 926 of "builtin.c" starts at pc 0x63e4 and ends at 0x6404.
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
<A NAME="IDX355"></A>
 | 
						|
<A NAME="IDX356"></A>
 | 
						|
<A NAME="IDX357"></A>
 | 
						|
After <CODE>info line</CODE>, the default address for the <CODE>x</CODE> command
 | 
						|
is changed to the starting address of the line, so that <SAMP>`x/i'</SAMP> is
 | 
						|
sufficient to begin examining the machine code (see section <A HREF="gdb_9.html#SEC64">Examining Memory</A>).  Also, this address is saved as the value of the
 | 
						|
convenience variable <CODE>$_</CODE> (see section <A HREF="gdb_9.html#SEC68">Convenience Variables</A>).
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX358"></A>
 | 
						|
<A NAME="IDX359"></A>
 | 
						|
<A NAME="IDX360"></A>
 | 
						|
<A NAME="IDX361"></A>
 | 
						|
<A NAME="IDX362"></A>
 | 
						|
<DT><CODE>disassemble</CODE>
 | 
						|
<DD>This specialized command dumps a range of memory as machine
 | 
						|
instructions.  The default memory range is the function surrounding the
 | 
						|
program counter of the selected frame.  A single argument to this
 | 
						|
command is a program counter value; GDB dumps the function
 | 
						|
surrounding this value.  Two arguments specify a range of addresses
 | 
						|
(first inclusive, second exclusive) to dump.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
The following example shows the disassembly of a range of addresses of
 | 
						|
HP PA-RISC 2.0 code:
 | 
						|
</P><P>
 | 
						|
 | 
						|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) disas 0x32c4 0x32e4
 | 
						|
Dump of assembler code from 0x32c4 to 0x32e4:
 | 
						|
0x32c4 <main+204>:      addil 0,dp
 | 
						|
0x32c8 <main+208>:      ldw 0x22c(sr0,r1),r26
 | 
						|
0x32cc <main+212>:      ldil 0x3000,r31
 | 
						|
0x32d0 <main+216>:      ble 0x3f8(sr4,r31)
 | 
						|
0x32d4 <main+220>:      ldo 0(r31),rp
 | 
						|
0x32d8 <main+224>:      addil -0x800,dp
 | 
						|
0x32dc <main+228>:      ldo 0x588(r1),r26
 | 
						|
0x32e0 <main+232>:      ldil 0x3000,r31
 | 
						|
End of assembler dump.
 | 
						|
</FONT></pre></td></tr></table></P><P>
 | 
						|
 | 
						|
Some architectures have more than one commonly-used set of instruction
 | 
						|
mnemonics or other syntax.
 | 
						|
</P><P>
 | 
						|
 | 
						|
For programs that were dynamically linked and use shared libraries,
 | 
						|
instructions that call functions or branch to locations in the shared
 | 
						|
libraries might show a seemingly bogus location--it's actually a
 | 
						|
location of the relocation table.  On some architectures, GDB
 | 
						|
might be able to resolve these to actual function names.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<DL COMPACT>
 | 
						|
<A NAME="IDX363"></A>
 | 
						|
<A NAME="IDX364"></A>
 | 
						|
<A NAME="IDX365"></A>
 | 
						|
<DT><CODE>set disassembly-flavor <VAR>instruction-set</VAR></CODE>
 | 
						|
<DD>Select the instruction set to use when disassembling the
 | 
						|
program via the <CODE>disassemble</CODE> or <CODE>x/i</CODE> commands.
 | 
						|
<P>
 | 
						|
 | 
						|
Currently this command is only defined for the Intel x86 family.  You
 | 
						|
can set <VAR>instruction-set</VAR> to either <CODE>intel</CODE> or <CODE>att</CODE>.
 | 
						|
The default is <CODE>att</CODE>, the AT&T flavor used by default by Unix
 | 
						|
assemblers for x86-based targets.
 | 
						|
</P><P>
 | 
						|
 | 
						|
<A NAME="IDX366"></A>
 | 
						|
<DT><CODE>show disassembly-flavor</CODE>
 | 
						|
<DD>Show the current setting of the disassembly flavor.
 | 
						|
</DL>
 | 
						|
<P>
 | 
						|
 | 
						|
<A NAME="Data"></A>
 | 
						|
<HR SIZE="6">
 | 
						|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | 
						|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_8.html#SEC51"> << </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_9.html#SEC59"> >> </A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | 
						|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | 
						|
</TR></TABLE>
 | 
						|
<BR>  
 | 
						|
<FONT SIZE="-1">
 | 
						|
 | 
						|
<address>
 | 
						|
 | 
						|
<p>Please send FSF & GNU inquiries & questions to <a
 | 
						|
href="mailto:gnu@gnu.org">gnu@gnu.org</a>.  There are also <a
 | 
						|
href="http://www.gnu.org/home.html#ContactInfo">other ways to
 | 
						|
contact</a> the FSF.</p>
 | 
						|
 | 
						|
<p>These pages are maintained by <a
 | 
						|
href="http://www.gnu.org/software/gdb/">the GDB developers</a>.</p>
 | 
						|
 | 
						|
<p>Copyright Free Software Foundation, Inc., 59 Temple Place - Suite
 | 
						|
330, Boston, MA 02111, USA.</p>
 | 
						|
 | 
						|
<p>Verbatim copying and distribution of this entire article is
 | 
						|
permitted in any medium, provided this notice is preserved.</p>
 | 
						|
 | 
						|
</address>
 | 
						|
 | 
						|
This document was generated
 | 
						|
by <I>GDB Administrator</I> on <I>March, 27  2008</I>
 | 
						|
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
 | 
						|
"><I>texi2html</I></A>
 | 
						|
 | 
						|
</BODY>
 | 
						|
</HTML>
 |