<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
<html> | |
<head> | |
<title>Debugging C/C++ Projects Tutorial</TITLE> | |
<meta name="DESCRIPTION" content="Short tutorial that demonstrates debugging C/C++ | |
projects in NetBeans IDE"> | |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" > | |
<meta name="author" content="Susan Morgan"><!--Optional tag--> | |
<link rel="stylesheet" type="text/css" href="../../../netbeans.css"> | |
</head> | |
<body> | |
<a name="top"></a> | |
<h1>Debugging C/C++ Projects Tutorial</h1> | |
<!-- START INTRO --> | |
<div class="articledate" style="margin-left: 0px;font-style:italic;"> | |
<!-- <p><em>Contributed by <i>Ann | |
Rice</i> and maintained by <i>Susan Morgan</i> --><br> | |
March 2013</em> [Revision number: V8.0-1]</div> | |
<p>The following short tutorial takes you through some of the features for | |
debugging a C or C++ project in NetBeans IDE. | |
</p> | |
<!-- END INTRO --> | |
<h3>Contents</h3> | |
<img src="../../../images_www/articles/74/netbeans-stamp-80-74.png" class="stamp" | |
alt="Content on this page applies to NetBeans IDE 7.4 and 8.0" title="Content on this page applies to the NetBeans IDE | |
7.4 and 8.0"> | |
<table class="b-none vatop " cellpadding="0" cellspacing="0"> | |
<tr> | |
<td class="hyphen">- </td> | |
<td><a href="#requirements" title="Requirements">Requirements</a></td> | |
</tr> | |
<tr> | |
<td class="hyphen">- </td> | |
<td><a href="#project" title="Creating the Sample Project"> | |
Creating the Sample Project</a></td> | |
</tr> | |
<tr> | |
<td class="hyphen">- </td> | |
<td><a href="#breakpoints" title="Creating Breakpoints"> | |
Creating Breakpoints</a></td> | |
</tr> | |
<tr> | |
<td class="hyphen">- </td> | |
<td><a href="#starting" title="Starting a Debugging Session">Starting a | |
Debugging Session</a></td> | |
</tr> | |
<tr> | |
<td class="hyphen">- </td> | |
<td><a href="#inspecting" title="Inspecting the State of the Application">Inspecting the State of the Application</a></td> | |
</tr> | |
</table> | |
<h2><A NAME="requirements"></a>Requirements</h2> | |
<p><b>To follow this tutorial, you need the following software and resources.</b> </p> | |
<table> | |
<tbody> | |
<tr> | |
<th class="tblheader" scope="col">Software or Resource</th> | |
<th class="tblheader" scope="col">Version Required</th> | |
</tr> | |
<tr> | |
<td class="tbltd1">NetBeans IDE</td> | |
<td class="tbltd1"><a | |
href="https://netbeans.org/downloads/index.html">version 7.4 or 8.0 with NetBeans C/C++ plugin module</a></td> | |
</tr> | |
<tr> | |
<td class="tbltd1">Java Developer Kit (JDK)</td> | |
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">version 7 or 8</a></td> | |
</tr> | |
</table> | |
<p>See the <a href="../../../community/releases/80/install.html">NetBeans IDE | |
Installation | |
Instructions</a> and <a | |
HREF="../../../community/releases/80/cpp-setup-instructions.html"> | |
Configuring the NetBeans IDE for C/C++/Fortran</a> for | |
information on downloading and installing the required software. | |
</p> | |
<h2><a name="project"></a>Creating the Sample Project</h2> | |
<p>The NetBeans IDE with C/C++ uses the <tt>gdb</tt> debugger and provides | |
numerous features for debugging your projects. To explore these features, you will use | |
the <tt>Quote</tt> project. If you have not already created this | |
project, do the following: | |
<ol> | |
<li>Choose File > New Project.</li> | |
<li>In the project wizard, expand the Samples category and the C/C++ subcategory.</li> | |
<li>Select the Applications subcategory, then select the <tt>Quote</tt> | |
project. Click Next, then click Finish. | |
</li> | |
</ol> | |
<h2><a name="breakpoints"></a>Creating Breakpoints</h2> | |
<p> | |
You can create and manipulate breakpoints in your code at any time | |
without starting a debugging session. | |
</p> | |
<div class="indent"> | |
<h3><a name="LineBreakpoint"></a>Creating and Removing a Line Breakpoint</h3> | |
<ol> | |
<li> | |
In the <tt>Quote_1</tt> project, open the <tt>quote.cc</tt> file. | |
</li> | |
<li>Set a line breakpoint by clicking in the left margin of the Source Editor | |
window next to line 171 (<tt>response = readChar("Enter disk module type: (S for single disks, R for RAID; Q - exit)", | |
'S');</tt>). The line | |
is highlighted in red to indicate that | |
the breakpoint is set.<br> | |
<img src="../../../images_www/articles/74/cnd/debugging/line_breakpoint1.png" | |
alt="Screenshot of Source Editor window" class="margin-around b-all"> | |
</li> | |
<li>You could remove the breakpoint by clicking on the icon in the left margin. | |
</li> | |
<li>Choose Window > Debugging > Breakpoints to open the Breakpoints | |
window. Your line breakpoint is listed under the C/C++ node.<br> | |
<img src="../../../images_www/articles/74/cnd/debugging/line_breakpoint2.png" | |
alt="Screenshot of Breakpoints window" class="margin-around b-all"> | |
</li> | |
<li>Expand the C/C++ node to see your breakpoint.<br> | |
<img src="../../../images_www/articles/74/cnd/debugging/line_breakpoint2_expand.png" | |
alt="Screenshot of Breakpoints window" class="margin-around b-all"></li> | |
</ol> | |
<h3><a name="FunctionBreakpoint"></a>Creating a Function Breakpoint</h3> | |
<ol> | |
<li>Click the Create New Breakpoint button in the left margin of the Breakpoints window | |
or choose Debug > New Breakpoint (Ctrl+Shift+F8) to open the New Breakpoint | |
dialog box. | |
</li> | |
<li>In the Debugger Type list, select Native.</li> | |
<li> | |
In the Breakpoint Type list, select Function. | |
</li> | |
<li>Type the function name <tt>Customer::GetDiscount</tt> in the Function | |
Name text field. Click OK. | |
<br> | |
<img src="../../../images_www/articles/74/cnd/debugging/function_breakpoint1.png" | |
alt="Screenshot of New Breakpoint dialog box" class="margin-around"> | |
</li> | |
<li>Your function breakpoint is set and is added to the list in the | |
Breakpoints window.<br> | |
<img src="../../../images_www/articles/74/cnd/debugging/function_breakpoint2.png" | |
alt="Screenshot of Breakpoints window" class="margin-around b-all"> | |
</li> | |
<li>Click the Select Breakpoint Groups button in the left margin to organize the breakpoints into different groups and select Type.<br> | |
<img src="../../../images_www/articles/74/cnd/debugging/group_breakpoint_type.png" | |
alt="Screenshot of grouping categor | |
ies in Breakpoints window" class="margin-around b-all"></li> | |
<li>Expand the File:Line and Function groups to display your breakpoints. <br> | |
<img src="../../../images_www/articles/74/cnd/debugging/breakpoint_types.png" | |
alt="Screenshot of breakpoints | |
organized by type" class="margin-around b-all"></li> | |
</ol> | |
</div> | |
<h2><a name="starting"></a>Starting a Debugging Session</h2> | |
<p>When you start a debugging session, the IDE starts the <tt>gdb</tt> | |
debugger, then runs the application inside the debugger. The IDE automatically | |
opens the debugger | |
windows and debugger toolbar and prints debugger output to the Output window.</p> | |
<ol> | |
<li>Start a debugging session for the <tt>Quote_1</tt> project by clicking the | |
Debug Project button | |
<img src="../../../images_www/articles/74/cnd/debugging/debugbutton.png" | |
alt="Screenshot of debug button"> or by | |
choosing Debug > Debug Project. <br>The debugger | |
starts and the application | |
runs. The debug toolbar is displayed. | |
<br> | |
<img src="../../../images_www/articles/74/cnd/debugging/debugger_toolbar.png" | |
alt="Screenshot of debugger toolbar buttons" class="margin-around"> | |
</li> | |
<li>Open the Sessions window by choosing Window > Debugging > Sessions. | |
<br>The debugging session is shown in this window. | |
</li> | |
</ol> | |
<h2><a name="inspecting"></a>Inspecting the State of the Application</h2> | |
<ol> | |
<li>The <tt>Quote_1</tt> application prompts you for input in the Output (Debug) window.</li> | |
<li>Enter a customer name after the "Enter customer name:" prompt. | |
<p>The application stops at the Customer::GetDiscount function breakpoint you set earlier and the | |
customer.cc file opens in the editor at the line where the funtion is called. | |
The Breakpoints window lists the two breakpoints you set earlier. | |
The green program counter arrow appears on top of the breakpoint icon of the function breakpoint. | |
<br> | |
<img src="../../../images_www/articles/74/cnd/debugging/function_breakpoint3.png" | |
alt="Screenshot of Breakpoints tab" class="margin-around b-all"></p> | |
</li> | |
<li>Click the tab for the Call Stack window or choose Window > Debugging > Call Stack. The call stack shows three frames.<br> | |
<img src="../../../images_www/articles/74/cnd/debugging/call_stack.png" | |
alt="Screenshot of Call Stack tab" class="margin-around b-all"> | |
</li> | |
<li>Open the Variables window and note that one variable is displayed. </li> | |
<!--<li>Click the <img src="../../../images_www/articles/74/cnd/debugging/autos.png" alt="Show autos button"> | |
button in the left column in the Variables tab to show Autos instead of local | |
variables.</li>--> | |
<li>Click the expand icons to expand the structure. | |
<br> | |
<img src="../../../images_www/articles/74/cnd/debugging/local_variables1.png" | |
alt="Screenshot of | |
Variables tab" class="margin-around b-all"> | |
</li> | |
<li>Click the Continue button in the toolbar. <br>The <tt>GetDiscount</tt> | |
function is executed, printing the customer discount to the Output (Debug) | |
window. Then you are prompted for input. | |
</li> | |
<li>Enter the input in response to the prompts. | |
<p>The program stops at the next | |
breakpoint, the line breakpoint you set earlier. In the | |
<tt>quote.cc</tt> file, the green program counter arrow appears on top | |
of the breakpoint icon indicating the line on which the program is | |
stopped. | |
<br><br> | |
<img src="../../../images_www/articles/74/cnd/debugging/line_breakpoint3.png" | |
alt="Screenshot of the Source Editor" class="margin-around b-all"> | |
</p> | |
</li> | |
<li> | |
Click the | |
Variables tab and note the long list of variables. | |
<br> | |
<img src="../../../images_www/articles/74/cnd/debugging/local_variables2.png" | |
alt="Screenshot of Local Variables tab" class="margin-around b-all"> | |
</li> | |
<li>Click the Call | |
Stack tab and note that there is now one frame in the stack. | |
</li> | |
<li>Choose Window > Debugging > Registers. | |
<br>The Registers window | |
opens, displaying the current contents of the registers. | |
<br> | |
<img src="../../../images_www/articles/74/cnd/debugging/registers.png" | |
alt="Screenshot of Registers window" class="margin-around b-all"> | |
<br> | |
</li> | |
<li>Choose Window > Debugging > Disassembly. | |
<br>The Disassembly window | |
opens, displaying the assembly instructions for the current source file. | |
<br> | |
<img src="../../../images_www/articles/74/cnd/debugging/disassembly.png" | |
alt="Screenshot of Disassembler window" class="margin-around b-all"> | |
<br> | |
</li> | |
<li> | |
Click the Continue button in the toolbar and continue entering input in response to the | |
prompts in the Output window until the program is completed. </li> | |
<li>When you | |
press Enter to exit the program, your | |
debug session ends. To end the debug session before the | |
execution of the program was complete, you could | |
click the Finish Debugger Session button in the toolbar or choose Debug > Finish Debugger Session. | |
</li> | |
</ol> | |
<p> | |
</p><h2>See Also</h2> | |
<p>Please see the | |
<a href="https://netbeans.org/kb/trails/cnd.html">C/C++ Learning Trail</a> for | |
more articles about developing with C/C++/Fortran in NetBeans IDE.</p> | |
<div class="feedback-box"><a href="mailto:users@cnd.netbeans.org?subject=Feedback:%20Debugging%20C/C++%20Projects%20-%20NetBeans%20IDE%207.4%20Tutorial">Send Feedback on This Tutorial</a></div> | |
</body> | |
</html> |