调试技术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
变量窗口
监视窗口
前往演示 test1
整数的回绕——为什么三个负数的和是正数?
为什么subject1,subject2,subject3的值都是-858993460<0 但是subject1+subject2+subject3= 1717986916>0
1.整数short,int,long在超过取值范围时都会出现回绕。就像时钟, 24点即0点,过了24点就又是1点了。 2.回绕的本质是进位溢出
谢谢
完 End 終わり
通过调试学习算法原理
前往演示 test2
如何用调试去解决问题
懂得如何使用调试工具和懂得如何去调试是不同的!
进行一次调试的步骤(推荐做法)
每一次调试都不是贸然进行的,而是有“组织”有“预谋”的! 在开始一次调试之前,先思考如下的几个问题:
1.当前的问题是什么?
2.你的预想是什么? 3.实现这些内容的代码在什么地方?
调试技术
基于Visual C++集成开发环境与C++控制台工程
饶尚智(几罗星人)
调试的基本思路
调试的目的是为了了解程序的运行过程,或是找
出程序中的逻辑错误。跟随程序的运行,获知程 序的执行流程和语句执行的结果,帮助我们理解 别人写的代码,或是确定代码为何与预期有出入。
调试的基本的思路是单步执行。
wk.baidu.com
名称 英文名称
步入
step into
步过
step over
跳出
step out
Shift+F11
快捷键
F11
F10
步入,步过的快捷键要重点记忆,其他了解
实验内容
1、采用选择排序法,将10个元素按照从小到大的顺序排列。数组 中的10个元素采用静态初始化。 算法思想:第1趟从a[0]到a[9]逐个比较,找到最小数的下标minIndex,如
在VC++中可以按F9或右键用Insert/Remove Breakpoint菜单来设臵断点
右键菜单设臵断点
有断点的语句
停下来我们能干什么?——变量窗口,监视窗口
VC++提供了断点让我们能够跟上程序的步伐,同时, 也提供了变量窗口和监视窗口来让我们能看到变量 的值甚至查询特定表达式的值。 在调试模式下这两个窗口才能显示出来
抛弃
抛砖引玉:为什么char str[10]=“我爱你”是正确的?即char数组是怎 么储存中文的?提示:调试看看每个素组元素是什么,再查相关资料
跟踪程序的执行——单步执行
单步执行时,程序一次执行一条语句或一次执行完一个函数, 随即停下来等待,直到你操作让其执行下一条语句。
单步执行分“步入”(step into),“步过”(step over), “跳出”(step out)
问题类型1
虽然是逻辑问题,但有所区别。程序执行的结果是我们最直观的所 见,因此从结果上来分类问题,这并不复杂。
1.无结果。如无输出,程序陷入死循环,崩溃等 着重检查程序的执行流程,检查是否是:
① 条件语句(if,switch)使程序走错方向;
② 循环语句(while,do-while,for)无法退出
让程序以调试模式启动
在VC++中程序有运行和调试两种模式,以前常使用的是运行模 式,即 ,现在我们要用调试模式:
方法1:【组建】->【开始调试】->【go】
方法2:工具栏上的 方法3:F5快捷键
前往演示 test1
让程序等等我们——断点
往常我们直接运行程序观察结果 ,但是代码将 在一瞬间执行结束,我们看不到程序的执行过程,调试模式 也是如此。 现在,我们使用断点来让程序暂停下来。有断点的语句在语 句前面将显示一个红圈
造成死循环;
③ 指针访问错误导致崩溃
前往演示 test3
问题类型2
2.错误的结果。
着重检查语句执行的结果,确定计算的开 始值,中间计算结果是否有问题。检查是否是累加 累乘变量没有初始化;自动类型转换引起取值改变
前往演示 test4
最后的建议
1.养成统一的代码编写习惯。缩进多少,哪些该加上括号 2.对于if,for,while都习惯性加上括号,哪怕只有一个语 句。 3.避免写太复杂的语句,需要时分开多个语句写。 4.表达式多加上括号限定求值循序,不确定的求值循序时 用括号人为限定求职循序。 5.多写注释,但又不能每一句都写。 6.条件表达式写相等时常量值放左边,例如: If(NULL == pstu) 可以避免If(pstu = NULL)这样的语句没有编译错误,却并 非你本意
32 + =0 28 24 20 16 12 8 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 一个int的大小
果minIndex!=0,则将a[0]与a[minIndex]中的数交换;第2趟从a[1]到a[9]逐 个比较,找到最小数的下标,若minIndex!=1,则a[1]与a[minIndex]交换。以 此类推,n个数需扫描n-1趟,第i趟需将i赋值给minIndex,然后将a[i+1]及之 后的所有元素逐个与a[minIndex]进行比较,将最小数的下标赋值给 minIndex,然后判断如果minIndex!=i,则交换a[i]与a[minIndex]中的数, 若相等则不用处理。