1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<!-- Copyright (C) 1988-2021 Free Software Foundation, Inc. 4 5Permission is granted to copy, distribute and/or modify this document 6under the terms of the GNU Free Documentation License, Version 1.3 or 7any later version published by the Free Software Foundation; with the 8Invariant Sections being "Free Software" and "Free Software Needs 9Free Documentation", with the Front-Cover Texts being "A GNU Manual," 10and with the Back-Cover Texts as in (a) below. 11 12(a) The FSF's Back-Cover Text is: "You are free to copy and modify 13this GNU Manual. Buying copies from GNU Press supports the FSF in 14developing GNU and promoting software freedom." --> 15<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ --> 16<head> 17<title>Debugging with GDB: Compilation</title> 18 19<meta name="description" content="Debugging with GDB: Compilation"> 20<meta name="keywords" content="Debugging with GDB: Compilation"> 21<meta name="resource-type" content="document"> 22<meta name="distribution" content="global"> 23<meta name="Generator" content="makeinfo"> 24<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 25<link href="index.html#Top" rel="start" title="Top"> 26<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index"> 27<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents"> 28<link href="Running.html#Running" rel="up" title="Running"> 29<link href="Starting.html#Starting" rel="next" title="Starting"> 30<link href="Running.html#Running" rel="previous" title="Running"> 31<style type="text/css"> 32<!-- 33a.summary-letter {text-decoration: none} 34blockquote.smallquotation {font-size: smaller} 35div.display {margin-left: 3.2em} 36div.example {margin-left: 3.2em} 37div.indentedblock {margin-left: 3.2em} 38div.lisp {margin-left: 3.2em} 39div.smalldisplay {margin-left: 3.2em} 40div.smallexample {margin-left: 3.2em} 41div.smallindentedblock {margin-left: 3.2em; font-size: smaller} 42div.smalllisp {margin-left: 3.2em} 43kbd {font-style:oblique} 44pre.display {font-family: inherit} 45pre.format {font-family: inherit} 46pre.menu-comment {font-family: serif} 47pre.menu-preformatted {font-family: serif} 48pre.smalldisplay {font-family: inherit; font-size: smaller} 49pre.smallexample {font-size: smaller} 50pre.smallformat {font-family: inherit; font-size: smaller} 51pre.smalllisp {font-size: smaller} 52span.nocodebreak {white-space:nowrap} 53span.nolinebreak {white-space:nowrap} 54span.roman {font-family:serif; font-weight:normal} 55span.sansserif {font-family:sans-serif; font-weight:normal} 56ul.no-bullet {list-style: none} 57--> 58</style> 59 60 61</head> 62 63<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"> 64<a name="Compilation"></a> 65<div class="header"> 66<p> 67Next: <a href="Starting.html#Starting" accesskey="n" rel="next">Starting</a>, Up: <a href="Running.html#Running" accesskey="u" rel="up">Running</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> 68</div> 69<hr> 70<a name="Compiling-for-Debugging"></a> 71<h3 class="section">4.1 Compiling for Debugging</h3> 72 73<p>In order to debug a program effectively, you need to generate 74debugging information when you compile it. This debugging information 75is stored in the object file; it describes the data type of each 76variable or function and the correspondence between source line numbers 77and addresses in the executable code. 78</p> 79<p>To request debugging information, specify the ‘<samp>-g</samp>’ option when you run 80the compiler. 81</p> 82<p>Programs that are to be shipped to your customers are compiled with 83optimizations, using the ‘<samp>-O</samp>’ compiler option. However, some 84compilers are unable to handle the ‘<samp>-g</samp>’ and ‘<samp>-O</samp>’ options 85together. Using those compilers, you cannot generate optimized 86executables containing debugging information. 87</p> 88<p><small>GCC</small>, the <small>GNU</small> C/C<tt>++</tt> compiler, supports ‘<samp>-g</samp>’ with or 89without ‘<samp>-O</samp>’, making it possible to debug optimized code. We 90recommend that you <em>always</em> use ‘<samp>-g</samp>’ whenever you compile a 91program. You may think your program is correct, but there is no sense 92in pushing your luck. For more information, see <a href="Optimized-Code.html#Optimized-Code">Optimized Code</a>. 93</p> 94<p>Older versions of the <small>GNU</small> C compiler permitted a variant option 95‘<samp><span class="nolinebreak">-gg</span></samp>’<!-- /@w --> for debugging information. <small>GDB</small> no longer supports this 96format; if your <small>GNU</small> C compiler has this option, do not use it. 97</p> 98<p><small>GDB</small> knows about preprocessor macros and can show you their 99expansion (see <a href="Macros.html#Macros">Macros</a>). Most compilers do not include information 100about preprocessor macros in the debugging information if you specify 101the <samp>-g</samp> flag alone. Version 3.1 and later of <small>GCC</small>, 102the <small>GNU</small> C compiler, provides macro information if you are using 103the DWARF debugging format, and specify the option <samp>-g3</samp>. 104</p> 105<p>See <a href="http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options">Options for Debugging Your Program or GCC</a> in <cite>Using the <small>GNU</small> Compiler Collection (GCC)</cite>, for more 106information on <small>GCC</small> options affecting debug information. 107</p> 108<p>You will have the best debugging experience if you use the latest 109version of the DWARF debugging format that your compiler supports. 110DWARF is currently the most expressive and best supported debugging 111format in <small>GDB</small>. 112</p> 113<hr> 114<div class="header"> 115<p> 116Next: <a href="Starting.html#Starting" accesskey="n" rel="next">Starting</a>, Up: <a href="Running.html#Running" accesskey="u" rel="up">Running</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> 117</div> 118 119 120 121</body> 122</html> 123