⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 appe1.htm

📁 很不错的一本关于VC的书
💻 HTM
📖 第 1 页 / 共 2 页
字号:
    </table>
    <p> <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">Developer Studio</font><font SIZE="3">自动打开</font><font FACE="Times New Roman" SIZE="3">Varialbles</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">Watch</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">所示。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="center"><img src="T13_1.gif" alt="T13_1.tif (317964 bytes)" WIDTH="571" HEIGHT="428"></p>
    <p ALIGN="center"></font><font SIZE="3">图</font><font FACE="Times New Roman" SIZE="3">13.1 
    </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"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">在左边的</font><font FACE="Times New Roman" SIZE="3">Variables</font><font SIZE="3">和右边的</font><font FACE="Times New Roman" SIZE="3">Watch</font><font SIZE="3">窗口中,可以观察和修改变量的数值。在</font><font FACE="Times New Roman" SIZE="3">Variables</font><font SIZE="3">窗口中,有三个标签:</font><font FACE="Times New Roman" SIZE="3">Auto</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">Local</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">This</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">Values</font><font SIZE="3">列的数值,然后输入一个新值,并按</font><font FACE="Times New Roman" SIZE="3">Enter</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">Debug</font><font SIZE="3">输出窗口,输出程序运行时的调试信息。</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">Tip</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">3.</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"></p>
    <p ALIGN="JUSTIFY"></font> <font SIZE="3"><b></p>
    <p ALIGN="JUSTIFY"></b><font color="#3973DE">插入断点</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">Insert/Remove Breakpoint</font><font SIZE="3">菜单项,就可以在当前语句行处加入一个断点。此时,在语句行右边,会出现一个红色实心圆,指示当前行加了一个断点。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font> <font SIZE="3"><b></p>
    <p ALIGN="JUSTIFY">删除断点</b></font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">在有断点的行上按右键弹出快捷菜单,选择</font><font FACE="Times New Roman" SIZE="3">Remove Breakpoint</font><font SIZE="3">命令,就可以删除该断点。此时,程序行边上的红色实心圆消失。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font> <font SIZE="3"><b></p>
    <p ALIGN="JUSTIFY">禁止断点</b></font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">有时候并不想删除断点,而只是希望暂时禁止断点,以后该断点可能还会用到。这是,可以从语句行的右键快捷菜单上选择</font><font FACE="Times New Roman" SIZE="3">Disable Breakpoint</font><font SIZE="3">,禁止当前行的断点。此时,标志断点的红色实心圆变成空心圆,表示断点被禁止。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font> <font SIZE="3"><b></p>
    <p ALIGN="JUSTIFY">恢复断点</b></font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">要恢复被禁止的断点,可以从含有被禁止断点的语句行的右键菜单中选择</font><font FACE="Times New Roman" SIZE="3">Enable Breakpoint</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">4.</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">TRACE</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">ASSERT</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">ASSERT_VALID</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">CObject::Dump</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"></p>
    <p></font><font SIZE="3"> </font><b><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">4.1 TRACE</font><font SIZE="3">宏</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">TRACE</font><font SIZE="3">宏在调试窗口输出变量数值,它采用类似于</font><font FACE="Times New Roman" SIZE="3">printf</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">CString::Format()</font><font SIZE="3">成员函数的字符串格式化语法,在</font><font FACE="Times New Roman" SIZE="3">TRACE</font><font SIZE="3">宏中,可以使用各种</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">类。举例如下:</p>
    <blockquote>
      </font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">int nSize=3;</p>
      <p ALIGN="JUSTIFY">CString sName(</font><font SIZE="3">“</font><font FACE="Times New Roman" SIZE="3">why</font><font SIZE="3">”</font><font FACE="Times New Roman" SIZE="3">);</p>
      <p ALIGN="JUSTIFY">TRACE(</font><font SIZE="3">“</font><font FACE="Times New Roman" SIZE="3">Name=%s,Size=%d\n</font><font SIZE="3">”</font><font FACE="Times New Roman" SIZE="3">,sName</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">nSize);</p>
    </blockquote>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">调试窗口输出</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">Name=why,Size=3</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">并换行。</font><b><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">4.2 ASSERT</font><font SIZE="3">宏</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">ASSERT</font><font SIZE="3">语法如下:</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">ASSERT(</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"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">如:</p>
    <blockquote>
      </font><font FACE="Times New Roman" SIZE="3"><p>CMyFrame 
      *pFrame=(CMyFrame*)AfxGetMainWnd();</p>
      <p>ASSERT(pFrame-&gt;IsKindOf(RUN_TIMECLASS(CMyFrame)))</font><font SIZE="3">;</p>
      </font><font FACE="Times New Roman" SIZE="3"><p>pFrame-&gt;DoSomeOperation();</p>
    </blockquote>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">又如:</p>
    <blockquote>
      </font><font FACE="Times New Roman" SIZE="3"><p>CAge a(21);</p>
      <p>ASSERT( a.IsKindOf( RUNTIME_CLASS( CAge ) ) );</p>
      <p>ASSERT( a.IsKindOf( RUNTIME_CLASS( CObject ) ) );</p>
    </blockquote>
    <p> <b></p>
    <p ALIGN="JUSTIFY">4.3 ASSERT_VALID</font><font SIZE="3">宏</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">ASSERT_VALID</font><font SIZE="3">用于检查指针和对象的有效性。对于一般指针,只检查指针是否为空(</font><font FACE="Times New Roman" SIZE="3">NULL</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">AssertValid</font><font SIZE="3">成员函数,判断对象合法性。这对于许多对象来说是非常有用的,比如,我们可以把人的年龄限制在</font><font FACE="Times New Roman" SIZE="3">1</font><font SIZE="3">到</font><font FACE="Times New Roman" SIZE="3">150</font><font SIZE="3">之间,如果超出这一范围,就可以认为是非法的数值。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">ASSERT_VALID</font><font SIZE="3">语法如下:</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">ASSERT_VALID(</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">13.1</font><font SIZE="3">:</p>
    <p> <b></p>
    <p ALIGN="JUSTIFY">清单</font><font FACE="Times New Roman" SIZE="3">13.1 ASSERT_VALID</font><font SIZE="3">宏的使用</p>
    <blockquote>
      </font></b><font FACE="Times New Roman" SIZE="3"><p>class CPerson : public CObject</p>
      <p>{</p>
      <p>protected: </p>
      <p>CString m_strName;</p>
      <p>int m_nAge; </p>
      <p>public:</p>
      <p>CPerson(CString aName,int aAge);</p>
      <p>//...</p>
      <p>#ifdef _DEBUG</p>
      <p>virtual void AssertValid() const; // Override</p>
      <p>#endif</p>
      <p>// ...</p>
      <p>};</p>
      <p>#ifdef _DEBUG</p>
      <p>void CPerson::AssertValid() const</p>
      <p>{</p>
      <p>//</font><font SIZE="3">首先调用父类的</font><font FACE="Times New Roman" SIZE="3">AssertValid</font><font SIZE="3">方法</p>
      </font><font FACE="Times New Roman" SIZE="3"><p>CObject::AssertValid();</p>
      <p>//</font><font SIZE="3">检查</font><font FACE="Times New Roman" SIZE="3">CPerson</font><font SIZE="3">对象的数据成员</p>
      </font><font FACE="Times New Roman" SIZE="3"><p>ASSERT( !m_strName.IsEmpty()); //</font><font SIZE="3">姓名不能为空</p>
      </font><font FACE="Times New Roman" SIZE="3"><p>ASSERT( (m_nAge &gt; 
      0)&amp;&amp;(m_nAge&lt;150) ); //</font><font SIZE="3">年龄必需大于</font><font FACE="Times New Roman" SIZE="3">0</font><font SIZE="3">且小于</font><font FACE="Times New Roman" SIZE="3">150</p>
      <p>} </p>
      <p>#endif</p>
      <p>......</p>
    </blockquote>
    <p ALIGN="JUSTIFY">void CMainFrame::OnAddPerson()</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">CPerson* pPerson= new CPerson(</font><font SIZE="3">“</font><font FACE="Times New Roman" SIZE="3">why</font><font SIZE="3">”</font><font FACE="Times New Roman" SIZE="3">,25);</p>
    <p ALIGN="JUSTIFY">ASSERT_VALID(pPerson);</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"> </p>
    <p> <b></p>
    <p ALIGN="JUSTIFY">4.4 Dump</b></p>
    <p ALIGN="JUSTIFY">CObject::Dump</font><font SIZE="3">用于输出对象内部数据成员的数值。当程序调试过程中希望检查对象内部状态时,</font><font FACE="Times New Roman" SIZE="3">Dump</font><font SIZE="3">是非常有用的。</font><font FACE="Times New Roman" SIZE="3">Dump</font><font SIZE="3">使用</font><font FACE="Times New Roman" SIZE="3">&lt;&lt;</font><font SIZE="3">插入操作符输出数据成员数值。</font><font FACE="Times New Roman" SIZE="3">Dump</font><font SIZE="3">的使用如清单</font><font FACE="Times New Roman" SIZE="3">13.2</font><font SIZE="3">所示。</p>
    <p> <b></p>
    <p ALIGN="JUSTIFY">清单</font><font FACE="Times New Roman" SIZE="3">13.2</font><font SIZE="3">使用</font><font FACE="Times New Roman" SIZE="3">Dump</b></p>
    <p>void CAge::Dump( CDumpContext &amp;dc ) const</p>
    <p>{</p>
    <p>CObject::Dump( dc );</p>
    <p>dc &lt;&lt; &quot;Age = &quot; &lt;&lt; m_years;</p>
    <p>}</p>
    <p></font><font SIZE="3">其中</font><font FACE="Times New Roman" SIZE="3">,dc</font><font SIZE="3">是一个</font><font FACE="Times New Roman" SIZE="3">CDumpContext</font><font SIZE="3">类型的变量,有关</font><font FACE="Times New Roman" SIZE="3">CDumpContext</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 ALIGN="JUSTIFY"></font> </p>
    <font SIZE="5"><hr noshade color="#3973DE" size="1">
    <p align="center"></font><font size="2" color="#000000">本教程由<a href="http://vcdynasty.yeah.net">Visual C++王朝(Where programmers come together)</a>协助制作<br>
    未经许可,请勿以任何形式复制</font></td>
    <b>
  </tr>
</table>
</center></div>

<p ALIGN="CENTER"></b><font SIZE="5"> </font><font FACE="Times New Roman" SIZE="5"></p>
</font><font FACE="Times New Roman" SIZE="3">

<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
</font></b>

<p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>

<p></font> </p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -