| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
| <html> |
| <head> |
| <title>调试 C/C++ 项目教程</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>调试 C/C++ 项目教程</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> 2013 年 3 月</em> [修订版本号:V8.0-1]</div> |
| |
| <p>下面的简明教程将为您介绍 NetBeans IDE 中用于调试 C 或 C++ 项目的一些功能。 |
| </p> |
| <!-- END INTRO --> |
| <h3>目录</h3> |
| <img alt="此页上的内容适用于 NetBeans IDE 7.4 和 8.0" class="stamp" src="../../../images_www/articles/74/netbeans-stamp-80-74.png" title="此页上的内容适用于 NetBeans IDE 7.4 和 8.0"> |
| <table class="b-none vatop " cellpadding="0" cellspacing="0"> |
| <tr> |
| <td class="hyphen">- </td> |
| <td><a href="#requirements" title="要求">要求</a></td> |
| </tr> |
| <tr> |
| <td class="hyphen">- </td> |
| <td><a href="#project" title="创建样例项目">创建样例项目</a></td> |
| </tr> |
| <tr> |
| <td class="hyphen">- </td> |
| <td><a href="#breakpoints" title="创建断点">创建断点</a></td> |
| </tr> |
| <tr> |
| <td class="hyphen">- </td> |
| <td><a href="#starting" title="启动调试会话">启动调试会话</a></td> |
| </tr> |
| <tr> |
| <td class="hyphen">- </td> |
| <td><a href="#inspecting" title="检查应用程序状态">检查应用程序状态</a></td> |
| </tr> |
| </table> |
| |
| <h2><a NAME="requirements"></a>要求</h2> |
| <p><b>要学习本教程,您需要具备以下软件和资源。</b> </p> |
| |
| <table> |
| <tbody> |
| <tr> |
| <th class="tblheader" scope="col">软件或资源</th> |
| <th class="tblheader" scope="col">要求的版本</th> |
| </tr> |
| <tr> |
| <td class="tbltd1">NetBeans IDE</td> |
| <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">带有 NetBeans C/C++ 插件模块的版本 7.4 或 8.0</a></td> |
| </tr> |
| <tr> |
| <td class="tbltd1">Java 开发者工具包 (JDK)</td> |
| <td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">版本 7 或 8</a></td> |
| </tr> |
| </table> |
| <p>有关下载并安装必需软件的信息,请参见 <a href="../../../community/releases/80/install.html">NetBeans IDE 安装说明</a>和<a HREF="../../../community/releases/80/cpp-setup-instructions.html">配置 NetBeans IDE 以使用 C/C++/Fortran</a>。 |
| </p> |
| <h2><a name="project"></a>创建样例项目</h2> |
| <p>带有 C/C++ 的 NetBeans IDE 使用了 <tt>gdb</tt> 调试器,并提供了很多项目调试功能。要了解这些功能,请使用 <tt>Quote</tt>(报价)项目。如果还没有创建这个项目,可执行以下操作: |
| <ol> |
| <li>选择 "File"(文件)> "New Project"(新建项目)。</li> |
| <li>在项目向导中,依次展开 "Samples"(样例)类别和 "C/C++" 子类别。</li> |
| <li>选择 "Applications"(应用程序)子类别,然后选择<tt>报价</tt>项目。单击 "Next"(下一步),然后单击 "Finish"(完成)。 |
| </li> |
| </ol> |
| <h2><a name="breakpoints"></a>创建断点</h2> |
| <p> |
| 您可以随时在代码中创建并操作断点,而不用启动调试会话。 |
| </p> |
| <div class="indent"> |
| <h3><a name="LineBreakpoint"></a>创建和删除行断点</h3> |
| <ol> |
| <li> |
| 在 <tt>Quote_1</tt> 项目中,打开 <tt>quote.cc</tt> 文件。 |
| </li> |
| <li>在源代码编辑器窗口靠近 171 行 (<tt>response = readChar("Enter disk module type: (S for single disks, R for RAID; Q - exit)", 'S');</tt>) 的左旁注中单击,设置一个行断点。该行将以红色突出显示,表明断点已设置。<br> <img alt=""Source Editor"(源代码编辑器)窗口的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/74/cnd/debugging/line_breakpoint1.png"> |
| </li> |
| <li>您可以通过单击位于左旁注中的图标来删除断点。 |
| </li> |
| <li>选择 "Window"(窗口)> "Debugging"(调试)> "Breakpoints"(断点)打开 "Breakpoints"(断点)窗口。在 C/C++ 节点下列出您的行断点。<br> <img alt=""Breakpoints"(断点)窗口的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/74/cnd/debugging/line_breakpoint2.png"> |
| </li> |
| <li>展开 C/C++ 节点可查看您的断点。<br> <img alt=""Breakpoints"(断点)窗口的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/74/cnd/debugging/line_breakpoint2_expand.png"></li> |
| </ol> |
| <h3><a name="FunctionBreakpoint"></a>创建函数断点</h3> |
| <ol> |
| <li>在 "Breakpoints"(断点)窗口左旁注中单击 "Create New Breakpoint"(创建新断点)按钮,或者选择 "Debug"(调试)> "New Breakpoint"(新建断点)(Ctrl+Shift+F8 组合键)以打开 "New Breakpoint"(新建断点)对话框。 |
| </li> |
| <li>在 "Debugger Type"(调试器类型)列表中,选择 "Native"(本机)。</li> |
| <li> |
| 在 "Breakpoint Type"(断点类型)列表中,选择 "Function"(函数)。 |
| </li> |
| <li>在 "Function Name"(函数名)文本字段中键入函数名 <tt>Customer::GetDiscount</tt>。单击 "OK"(确定)。 <br> <img alt=""New Breakpoint"(新建断点)对话框的屏幕快照" class="margin-around" src="../../../images_www/articles/74/cnd/debugging/function_breakpoint1.png"> |
| </li> |
| <li>函数断点已设置,并且已添加到 "Breakpoints"(断点)窗口列表中。<br> <img alt=""Breakpoints"(断点)窗口的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/74/cnd/debugging/function_breakpoint2.png"> |
| </li> |
| <li>单击左旁注中的 "Select Breakpoint Groups"(选择断点组)按钮以将断点组织到不同的组,然后选择 "Type"(类型)。<br> <img alt="&quot;Breakpoints&quot;(断点)窗口中的分组类别的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/74/cnd/debugging/group_breakpoint_type.png"></li> |
| <li>展开 "File:Line"(文件:行)和 "Function"(函数)组以显示您的断点。<br> <img alt="按类型组织的断点的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/74/cnd/debugging/breakpoint_types.png"></li> |
| </ol> |
| </div> |
| |
| <h2><a name="starting"></a>启动调试会话</h2> |
| <p>在启动调试会话时,IDE 会启动 <tt>gdb</tt> 调试器,然后在调试器中运行应用程序。IDE 将自动打开调试器窗口和调试器工具栏,并在 "Output"(输出)窗口中打印调试器输出。</p> |
| <ol> |
| <li>通过单击 "Debug Project"(调试项目)按钮 <img alt="&quot;Debug&quot;(调试)按钮的屏幕快照" src="../../../images_www/articles/74/cnd/debugging/debugbutton.png"> 或通过选择 "Debug"(调试)> "Debug Project"(调试项目),为 <tt>Quote_1</tt> 项目启动调试会话。<br>此时将启动调节器,并运行应用程序。显示调试工具栏。<br> <img alt="调试器工具栏按钮的屏幕快照" class="margin-around" src="../../../images_www/articles/74/cnd/debugging/debugger_toolbar.png"> |
| </li> |
| <li>选择 "Window"(窗口)> "Debugging"(调试)> "Sessions"(会话)打开 "Sessions"(会话)窗口。<br>调试会话将显示在此窗口中。 |
| </li> |
| </ol> |
| <h2><a name="inspecting"></a>检查应用程序状态</h2> |
| <ol> |
| <li><tt>Quote_1</tt> 应用程序会提示您在 "Output (Debug)"(输出(调试))窗口中输入信息。</li> |
| <li>在提示 "Enter customer name:"(输入客户名:)后输入客户名。 |
| <p>该应用程序将在您先前设置的 Customer::GetDiscount 函数断点处停止,并且 customer.cc 文件将在编辑器中调用该函数的行中打开。此时 "Breakpoints"(断点)窗口会列出先前设置的两个断点。函数断点的断点图标顶端会出现绿色程序计数器箭头。<br> <img alt=""Breakpoints"(断点)标签的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/74/cnd/debugging/function_breakpoint3.png"></p> |
| </li> |
| <li>单击 "Call Stack"(调用堆栈)窗口的标签,或者选择 "Window"(窗口)> "Debugging"(调试)> "Call Stack"(调用堆栈)。此时调用堆栈将显示三个框架。<br> <img alt=""Call Stack"(调用堆栈)标签的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/74/cnd/debugging/call_stack.png"> |
| </li> |
| <li>打开 "Variables"(变量)窗口,此时您看到显示了一个变量。 </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>单击展开图标以展开此结构。<br> <img alt=""Variables"(变量)标签的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/74/cnd/debugging/local_variables1.png"> |
| </li> |
| <li>单击工具栏中的 "Continue"(继续)按钮。<br>此时将执行 <tt>GetDiscount</tt> 函数,同时在 "Output (Debug)"(输出(调试))窗口中显示客户折扣。此时系统会提示输入信息。 |
| </li> |
| <li>按照提示输入信息。 |
| <p>程序会在下一个断点(即先前设置的行断点)处停止。在 <tt>quote.cc</tt> 文件中,断点图标顶端会出现绿色程序计数器箭头,指示程序暂停在哪一行。 <br><br> <img alt=""Source Editor"(源代码编辑器)的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/74/cnd/debugging/line_breakpoint3.png"> |
| </p> |
| </li> |
| <li> |
| 单击 "Variables"(变量)标签,注意会显示局部变量的详细列表。 <br> <img alt=""Local Variables"(局部变量)标签的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/74/cnd/debugging/local_variables2.png"> |
| </li> |
| <li>单击 "Call Stack"(调用堆栈)标签,注意此时堆栈中有一个框架。 |
| </li> |
| <li>选择 "Window"(窗口)> "Debugging"(调试)> "Registers"(注册)。<br>此时将打开 "Registers"(注册)窗口,其中显示注册的当前内容。 <br> <img alt=""Registers"(注册)窗口的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/74/cnd/debugging/registers.png"> <br> |
| </li> |
| <li>选择 "Window"(窗口)> "Debugging"(调试)> "Disassembly"(反汇编)。<br>此时将打开 "Disassembly"(反汇编)窗口,其中显示当前源文件的汇编指令。 <br> <img alt=""Disassembler"(反汇编程序)窗口的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/74/cnd/debugging/disassembly.png"> <br> |
| </li> |
| <li> |
| 单击工具栏中的 "Continue"(继续)按钮,并继续按照提示在 "Output"(输出)窗口中输入信息,直到程序完成。 </li> |
| <li>按 Enter 键退出程序后,调试会话便会结束。要在程序执行完毕以前结束调试会话,可以在工具栏中单击 "Finish Debugger Session"(完成调试器会话)按钮,或者选择 "Debug"(调试)> "Finish Debugger Session"(完成调试器会话)。 |
| </li> |
| </ol> |
| <p> |
| </p><h2>另请参见</h2> |
| <p>有关在 NetBeans IDE 中使用 C/C++/Fortran 进行开发的更多文章,请参见 <a href="https://netbeans.org/kb/trails/cnd.html">C/C++ 学习资源</a>。</p> |
| |
| <div class="feedback-box"><a href="mailto:users@cnd.netbeans.org?subject=Feedback:%20Debugging%20C/C++%20Projects%20-%20NetBeans%20IDE%207.4%20Tutorial">发送有关此教程的反馈意见</a></div> |
| |
| </body> |
| </html> |