📄 appe1.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>附录1 Visual C++程序的调试</title>
</head>
<body link="#3973DE" alink="#3973DE">
<font SIZE="5"><b><div align="center"><center>
<table border="0" width="615" cellspacing="0" cellpadding="0">
<tr>
</b><td><div align="center"><center><table border="0" width="615" cellpadding="0" cellspacing="0" height="20">
<tr>
<td width="377" bgcolor="#15397D" height="20"></td>
<td width="238" bgcolor="#000000" height="20"><p align="right"></font><span style="text-decoration: none"><a href="../../index.htm"><font color="#FFFFFF">电脑报Visual
C++网络教程</font></a></span></td>
</tr>
</table>
</center></div><font SIZE="4"><b><p ALIGN="CENTER"></b></font><font color="#3973DE" SIZE="4">附录</font><font color="#3973DE"><font FACE="Times New Roman" SIZE="4">1 Visual
C++</font><font SIZE="4">程序的调试</font></font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">由于各种原因,在程序开发过程中难免会出现这样那样的错误。错误主要有三种:编译错误,运行错误和逻辑错误。编译错误可以通过检查</font><font FACE="Times New Roman" SIZE="3">C++</font><font SIZE="3">语法、拼写以及函数参数形式等来排除。如果要排除运行过程中的错误和逻辑上的错误,则需要通过调试程序来完成。另外,调试本身也是一种很好的学习方法,通过调试跟踪,我们可以了解</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">的内部运行机制。因此,我们有必要了解调试技术,本附录就简要的介绍</font><font FACE="Times New Roman" SIZE="3">Visual C++</font><font SIZE="3">程序调试技术。 </font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"><b></p>
<p ALIGN="JUSTIFY"></b></font><font color="#3973DE" FACE="Times New Roman" SIZE="3">1.</font><font SIZE="3" color="#3973DE">启动调试器</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">Visual C++</font><font SIZE="3">提供一个功能强大的内置集成调试器。要启动调试器,可以在</font><font FACE="Times New Roman" SIZE="3">Build</font><font SIZE="3">菜单下选择</font><font FACE="Times New Roman" SIZE="3">Start Debug</font><font SIZE="3">菜单。这个菜单有四个子菜单:</font><font FACE="Times New Roman" SIZE="3">Go</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">Step Into</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">Run to cursor</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">Attach to process</font><font SIZE="3">。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">Go</font><font SIZE="3">命令从当前语句开始执行程序,直到遇到一个断点或程序结束。用</font><font FACE="Times New Roman" SIZE="3">Go</font><font SIZE="3">命令启动调试器时,从头开始执行程序。</font><font FACE="Times New Roman" SIZE="3">Step Into</font><font SIZE="3">单步执行每一程序行,遇到函数时进入函数体内单步执行。</font><font FACE="Times New Roman" SIZE="3">Run to cursor</font><font SIZE="3">运行程序至当前光标位置。</font><font FACE="Times New Roman" SIZE="3">Attach to process</font><font SIZE="3">将调试器与当前运行的其中某个进程联系起来,这样就可以跟踪进入进程内部,就象调试项目工作区中当前打开的应用程序一样调试运行中的进程。</font><font FACE="Times New Roman" SIZE="3"></p>
<b><p ALIGN="JUSTIFY"></b></font><font color="#3973DE" FACE="Times New Roman" SIZE="3">2.</font><font SIZE="3" color="#3973DE">调试菜单</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">启动调试器后,</font><font FACE="Times New Roman" SIZE="3">Build</font><font SIZE="3">菜单消失,取而代之的是</font><font FACE="Times New Roman" SIZE="3">Debug</font><font SIZE="3">菜单。</font><font FACE="Times New Roman" SIZE="3">Debug</font><font SIZE="3">菜单提供如下菜单项用于调试程序,见表</font><font FACE="Times New Roman" SIZE="3">13.1</font><font SIZE="3">。</p>
<p> <b></p>
<p ALIGN="CENTER">表</font><font FACE="Times New Roman" SIZE="3">13.1 </font><font SIZE="3">用于调试的菜单命令</font></b></p>
<table BORDER="1" CELLSPACING="2" BORDERCOLOR="#7f7f7f" CELLPADDING="1" WIDTH="557">
<tr>
<td WIDTH="18%"><font SIZE="3">菜单项</font></td>
<td WIDTH="16%"><font SIZE="3">快捷键</font></td>
<td WIDTH="66%"><font SIZE="3">作用</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Go</font></td>
<td WIDTH="16%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">F5</font></td>
<td WIDTH="66%"><font SIZE="3"><p ALIGN="JUSTIFY">运行程序至断点或程序结束</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Restart</font></td>
<td WIDTH="16%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Ctrl+Shift+F5</font></td>
<td WIDTH="66%"><font SIZE="3"><p ALIGN="JUSTIFY">重新载入程序,并启动执行</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Stop Debugging</font></td>
<td WIDTH="16%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Shift+F5</font></td>
<td WIDTH="66%"><font SIZE="3"><p ALIGN="JUSTIFY">关闭调试会话</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Break</font></td>
<td WIDTH="16%"> </td>
<td WIDTH="66%"><font SIZE="3"><p ALIGN="JUSTIFY">在当前位置出终止程序执行</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Step Into</font></td>
<td WIDTH="16%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">F11</font></td>
<td WIDTH="66%"><font SIZE="3"><p ALIGN="JUSTIFY">单步执行,并进入所调用的函数体内</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Step Over</font></td>
<td WIDTH="16%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">F10</font></td>
<td WIDTH="66%"><font SIZE="3"><p ALIGN="JUSTIFY">单步执行,但不进入函数</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Step Out</font></td>
<td WIDTH="16%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Shift+F11</font></td>
<td WIDTH="66%"><font SIZE="3"><p ALIGN="JUSTIFY">运行程序到当前函数调用结束后的第一条语句,即跳出当前调用的函数</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Run to Cursor</font></td>
<td WIDTH="16%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Ctrl+F10</font></td>
<td WIDTH="66%"><font SIZE="3"><p ALIGN="JUSTIFY">运行至当前光标(可插入字符)处</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Exceptions</font></td>
<td WIDTH="16%"> </td>
<td WIDTH="66%"><font SIZE="3"><p ALIGN="JUSTIFY">用于设置异常,程序可以选择在遇到异常处停止或遇到未处理的异常处停止这两种异常处理方式。</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Threads</font></td>
<td WIDTH="16%"> </td>
<td WIDTH="66%"><font SIZE="3"><p ALIGN="JUSTIFY">用于线程调试,可以挂起、恢复执行或切换活动线程</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Step Into
Specific Function</font></td>
<td WIDTH="16%"> </td>
<td WIDTH="66%"><font SIZE="3"><p ALIGN="JUSTIFY">直接进入某个函数内部执行,这对于多层嵌套的函数非常有用</font></td>
</tr>
</table>
<p> <font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font> <font SIZE="3"><b></p>
<p ALIGN="JUSTIFY"></b></font><font color="#3973DE" SIZE="3">注:按</font><font color="#3973DE"><font FACE="Times New Roman" SIZE="3">F7</font><font SIZE="3">快捷键重建程序或关闭</font><font FACE="Times New Roman" SIZE="3">Developer Studio</font><font SIZE="3">窗口等操作都会终止调试会话。</font></font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">另外,在</font><font FACE="Times New Roman" SIZE="3">View</font><font SIZE="3">菜单下还提供一个</font><font FACE="Times New Roman" SIZE="3">Debug Windows</font><font SIZE="3">菜单,</font><font FACE="Times New Roman" SIZE="3">Debug Windows</font><font SIZE="3">菜单有几个子菜单,用于隐藏或显示与调试工作相关的一些窗口。这些菜单有:</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font> </p>
<table CELLSPACING="0" BORDER="0" CELLPADDING="1" WIDTH="557">
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Watch</font></td>
<td WIDTH="14%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Alt+3</font></td>
<td WIDTH="68%"><font SIZE="3"><p ALIGN="JUSTIFY">显示</font><font FACE="Times New Roman" SIZE="3">Watch</font><font SIZE="3">窗口,用于观察和设置一些变量值</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Call Stack</font></td>
<td WIDTH="14%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Alt+7</font></td>
<td WIDTH="68%"><font SIZE="3"><p ALIGN="JUSTIFY">显示调用栈(</font><font FACE="Times New Roman" SIZE="3">call stack</font><font SIZE="3">),可以让用户观察调用的全局函数和类成员函数情况。</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Memory</font></td>
<td WIDTH="14%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Alt+6</font></td>
<td WIDTH="68%"><font SIZE="3"><p ALIGN="JUSTIFY">观察未使用的内存块</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Variables</font></td>
<td WIDTH="14%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Alt+4</font></td>
<td WIDTH="68%"><font SIZE="3"><p ALIGN="JUSTIFY">观察与当前函数相关的全局变量和局部变量</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Registers</font></td>
<td WIDTH="14%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Alt+5</font></td>
<td WIDTH="68%"><font SIZE="3"><p ALIGN="JUSTIFY">观察微处理器的寄存器值</font></td>
</tr>
<tr>
<td WIDTH="18%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Disassembly</font></td>
<td WIDTH="14%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">Alt+8</font></td>
<td WIDTH="68%"><font SIZE="3"><p ALIGN="JUSTIFY">打开窗口显示汇编程序源代码</font></td>
</tr>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -