vs2008简单调试方法.pdf

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
vs2008简单调试方法

VS2008 简单调试方法 程序的错误通常可以分为若干类,语法错误,链接错误,逻辑错误。语法错误是比较容 易查找并且修改的,而且编译给出的提示信息也比较完整,所以容易修改。链接错误来源很 多,常常由于和系统、库函数等方面的原因出错,难以一言蔽之。最后是逻辑错误,也就是 学生在实验课上碰到的难点,因为系统没有给出明确的提示,同学也只是知道运行错误,那 么如何找到并修改运行错误就非常重要。下面以一个实例简单介绍一下调试过程,当然更加 深入的还需自己多练习,学习。该文档所举例子为VS2008 ,同样适用于VS2005 ,VC++6 。 1 一个实例 一个链表的程序,包括主程序 Win32_C_Proj.cpp 文件,Bucket.h 和 Bucket.cpp ,其中 Bucket 用链表的方式实现一个容器。如下分别展示了main 函数,bucket 的插入元素函数和 类的数据定义。 运行结果如下图 运行该程序,我们要的结果是1,2,因为是再第一位置插入1,第二位置插入2 。而现在 这个程序的输出结果却是2,1 ,和我们预想的不符合,说明程序设计过程中存在逻辑上的错 误,也就是算法设计的问题。 2 初步发现问题 接下来第一步就是要发现问题。程序就那么几句,很明显,我们需要做的第一步就是确 定错误的大至位置。 按F10 运行程序,运行程序如下: 其中1 位置是调试常有的工具按钮,2 位置的箭头指示的是当前程序运行到的位置。 工具按钮中八个按钮分别是:  继续运行(F5 ,会运行到下一个断电停止,如果没有断点,则运行到结束)、  停止运行(不结束程序ctrl+shift+F5 )、  结束运行(结束程序调试 shift+F5 )、  重新启动、  显示下一个语句、  运行到函数内部(如果当前语句是一个函数)(F11)  运行到同层的下一条语句(F10)  跳出当前函数(shift+F11 ) 我们按F10 ,运行到bucket1.insertElem(2,2) ,这时候箭头指向该语句,表示该语句前面 的语句都运行完成,但是该语句还未运行,显示的监视窗口如下: Bucket1 变量展开之后可以看到,它包含size=1,head 节点和currentNode 。Head 节点 展开,其值data 为-858993460 (这个区域对链表头而言没有用),next 又指向一个节点,所 指节点值为1,next 为空。这些结果和我们的预期一致,说明到目前为止没有发现错误。 再按F10 ,运行的窗口监视变化为下图: 从这里观察head 的next 指向的节点值是2,2 这个节点指向的值是 1,很明显我们希望 在第二个位置插入2 ,而不是第一个位置。因此可以断定刚才执行的这个语句有问题。 2 深入发现问题 在初步发现问题在InsertElem 函数之后,接下来重新开始,并且在发现错误的这条语句 上加断点(光标停留在该语句行,并且按F9 ),效果如下: 这样设置的目的是便于直接运行到该位置,特别在程序比较长的时候,如果再次从头一 步一步运行非常耗时间,所以这里设置断点,然后按F5 可以直接运行到该位置。我们让程 序运行到该位置,效果如下: 这时候就需要进一步考察该函数运行了,因为我们已经断定这里存在错误。用F11 让程 序运行进入到该函数内部,效果如下: 接着按照前面的方法用 F10 让程序在该层逐步运行,并且对比你所预期的结果和程序 运行的结果,如果不一致,便发现问题了。在本例中,要在第二个为止插入节点,那么 for 语句应该执行一次,让p 移动,而我在执行过程中发现,for 语句没有进入内部执行,直接 到如下为止,因此可以断定此处存在和预期不符合的情况。 再仔细推敲,很容易发现问题:for 语句中的k 初始为2 导致p 没有向后移动。 3 解决问题 发现问题后加以解决就非常方便了,只要把k 的初始值改为1 便可。至此,我们解决了 一个逻辑错误。当然算法如果还有其它的错误,则还需要进一步发现。 4 其它 在程序较长的时候,特别是有循环存在的时候,可以适当设置若干个断点把程序分成几 个部分,然后直接F5 运行到断点,观察结果和预期效果。这样做的好处就是可以避免对长 程序逐语句运行耗费很多时间,可以快速确定程序问题所在区域。然后在该区域内部再一步 一步跟踪执行。 另外,在调试程序的

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档