- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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 运行到断点,观察结果和预期效果。这样做的好处就是可以避免对长
程序逐语句运行耗费很多时间,可以快速确定程序问题所在区域。然后在该区域内部再一步
一步跟踪执行。
另外,在调试程序的
您可能关注的文档
- 城市地域文化在地铁站中的表达研究_陆伟伟.pdf
- 2016年~2017年人民大学管理科学与工程考研经验分享.pdf
- 2016-2017中国人民大学统计学院风险管理与精算学考试科目、分数线、参考书目、复试、考研真题、经验.pdf
- 契科夫解析系列.pdf
- 01人教版一年级上册语文教学反思(全册_共两套).pdf
- 白银市土壤重金属污染综合整治.pdf
- 【单元突破】九年级化学全册 专题整合复习卷(四).pdf
- 流体力学(第二版) 龙天渝 第八章 绕流运动习题答案.pdf
- C编译器自动测试工具的剖析与移植.pdf
- catia发布命令 史上最详细的解释和举例应用.pdf
- 2024年人教版数学五年级下册图形的运动说课稿3篇.pdf
- 2023年关于托管协议书6篇.pdf
- GDDO-20T三相交流采样交直流变送器检验装置试验报告.pdf
- 2022年黑龙江省大兴安岭地区初级护师基础知识专项练习(含答案).pdf
- 2022-2023学年人教版五年级数学上册典型例题第三单元:进一法和去尾法解决实际问题练习 讲解版.pdf
- 2022年湖北省武汉市中考化学试题(含答案解析).pdf
- 2022年西式面点师(初级)考试题库大全(含答案).pdf
- 2022-2023学年甘肃省陇南市统招专升本英语自考真题(含答案).pdf
- 人教版四年级英语下册期末试卷及答案【练题】.pdf
- 2023年常德市初中学业水平考试模拟试卷.pdf
文档评论(0)