某大学C语言题目之Debug题的做法

 

首先我们要了解 什么是Debug。

Debug是供程序员使用的程序调试工具,可以用它检查内存中任何地方的字节以及修改任何地方的字节。它可以用于逐指令执行某个程序以验证程序运行的正确性,也可以追踪执行过程、比较一个指令执行前后的值以及比较与移动内存中数据的范围

简而言之,就是一步一步运行程序,观察变量的值来寻找程序哪里出错。

呐,我们如何Debug呢?

0.准备工作:先将你的编译器设置成以管理员方式运行,否则可能无法Debug。

鼠标选中你的编译器(快捷方式我不知道可不可以,最好找它的原文件,它的本尊),右键,然后属性,然后看图:

(1.5号更新)很多小伙伴不知道把哪个东西设置成管理员模式 我现在说一下

首先,在桌面找到你的vc6.0的图标,右键-打开文件位置

然后,把这个程序MSDEV.exe设置成管理员身份运行,这才是你用的编译器的本尊。

如果桌面上你的图标不见了,那么用这个方式- > 先运行你的VC6.0,然后打开任务管理器(Ctrl+Alt+小数点)

找到VC6.0,然后右键 也可以打开文件所在位置

1.下断点。

Q:什么是断点?

A:顾名思义,断点就是程序中断的一个点,程序会一直运行,直到遇见断点才会暂停,然后你才能从此处一步一步跟踪调试。

Q:那么我们怎么才能下断点呢?

A:对于VC6.0,鼠标放于某一行代码上,然后按F9,你就会发现你的程序前面出现了一个小红点,这就是断点(不知道为什么,Vc你要先编译一次,然后才能下断点)。如图:

对于题目来说,我们最好是将断点放置于主函数的第一行,如上图,我们放在int iA, iB那里就行了。

当然,也可以不用快捷键下断点,可以手动下:

鼠标放在代码编辑框前面,然后右键,可以下断点。

2.下了断点之后,我们就因该运行程序了,但是不是像以前那样运行,而是要点击那个Go图标(红色感叹号右边)或者按F5。

当我们运行的时候 ,就会发生如下情况:

我们会发现一个小箭头与我们的断点重合了,那么这个小箭头就是我们程序当前处于的位置。因为这个小箭头在printf前面,所以下面的这个程序,也没有运行printf。我们的程序被暂停到printf前面了!

然后,我们只需要按F10(在写代码的地方按),也就是Step Over,就可以执行到下面一句。

下面展示按了一次F10的效果:

我们程序的箭头到了scanf前面,并且输出了一个please input x y。

当我们再次按下F10的时候,我们会得到如下结果:

为什么不能按F10了?

因为程序是运行状态的,在等待用户输入,执行这句scanf。

我们基本上要用的是下面的变量查看:因为在输入scanf前 x y都只才定义,并没有赋值,所以是一个随机值。

当我们输入了 8 7的时候,程序就会变成如下情况

我们的箭头移位了,下面的变量值也更改了。

我把代码改成学校题的代码,所以 后面图里面的if不是前面几张图的== 而是 =

然后我们的iA iB均变成了7. 因为7!=0,所以if(true),准备执行printf(yes)。然后再一次F10

然后就输出了yes 再次F10

箭头到了主函数return 前面,到此,函数的调试基本上就结束了


下面我们来讲讲怎么做题

1.做题的第一步,永远都是审题。

我们审题审什么,就是审:这个程序的目的的是什么,有没有什么特殊的限制。例如我们的D13454

本题就是:输入两个整数,如果相等输出yes ,否则输出no。很简单,也没有什么其他的要求。

2.按题目意思做就可以了

(1)(2)所说 我们只需要运行就可以了,不用Debug。

(3)开始 我们就要开始debug了。结合前面我展示Debug过程的图,我们可以得到如下步骤,(这个步骤是指程序后面所标记的//M

然后我们第一步运行的时候M1,iA iB均没有被赋值,所以按题目所说,随机值填/

我们手动输入8 7 后,然后第二步iA iB被赋值,所以就按照程序下面提示的填iA 是8 iB是7. 程序并没有报什么错,也没有意外终,所以运行正常我们点上√

下一步 M3执行了if (iA = iB) 我们可以看下面的变量值查看 我们跟着填就可以了,iA 7  iB 7,然后填进去, 我们执行了printf yes 也就是M4 的语句,我们就填M4 输出 yes 因为说忽略换行

然后再次调试。。。

最后我们填写结论 你猜也才的到, 是if 里面写错了 填上行数就可以了。至此,一个Debug题就做好了!


后记:

F10和F11的区别:

F10是单步运行,他会直接把这条语句运行完毕,直到下一步运行完为止。

F11是单步进入,他会进入到这条语句内部。

什么时候用F11?

当你要进入你写的某个函数里时用F11进入,或者在那个函数里面下断点用F10,请看下面4张图:

图1-按下F10
图2-按下F11

 

图三-双断点-按F10
图四-双断点-按F11

 

然后,你就应该懂了。如果一对一条普通的函数按F11,如printf,那么你就会见到他的汇编代码了2333

就酱

补充:

跳出循环代码 不上图了 如果用F10,则会执行完循环,到循环结构完成后面的下一句暂停。如果用F11,则会停在循环语句里面,如果想看循环一步一步的执行,就用F11.

个人理解,每一条代码可以看成{代码},比如printf("1") 就可以看成{printf("1") },如果用F11,则会进入printf这个语句,如果F10,就相当于运行到 }之后。当循环表示为{循环体}时,F10就直接循环完了,到了 }后面。如果F11,就是进入循环体,然后一直F11就可以代表在循环里一句一句的运行。

自己写写代码调试试一下,我是真的不想放图了。(此次修改于2019/1/5 23:43分)晚安


真 后记

                                              哇!马上就考高数了QAQ 我还在改博客

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

康娜喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值