一个灵魂问题:你怕bug吗?

听到这个问题的你瑟瑟发抖。

不要怕,正所谓“知己知彼,百战不殆”首先,你知道什么是bug吗?
我们来看一个有趣的小故事:

这个小故事介绍了第一个bug发现的过程和bug的本义,是不是非常有趣?作为计科专业的小秃头你是否为debug的过程而烦恼,你要有着福尔摩斯般地智慧和判断力,才能将一个一个bug按在地上摩擦。

现在,让我们开始我们的福尔摩斯之旅,来掌握一些摩擦bug的实用调试技巧吧!


福尔摩斯之旅第一站:明确两个概念:debug和release**


我们以一个代码为例:

我们可以看到在Debug的环境下,调试和监视都是可以的,下面我们换release环境来看一下


我们会发现它根本无法调试且让我的360认为有木马,直呼好家伙!但并不是所有使用release都会出现被误会成木马的情况,也要根据不同编译器,不同程序等等因素来看,不要卡太死。

除了能否调试不同外,两种文件的大小也不相同。

福尔摩斯之旅第二站:
下面我们来介绍Windows环境调试:

我们先来看一下调试的菜单:


红色圈出的部分是我们经常用到的哦。
注意:F5和F9经常配合使用
F5为启动调试,F9为切换断点(断点通俗来说就是程序走到那里就不继续走了),二者相遇如高山流水伯牙子期,我们来用一个例子看看他们俩怎么一块用:

下面我们来记下几个常用的快捷键:
F5
启动调试,经常用来直接调到下一个断点处。
F9
创建断点和取消断点 断点的重要作用,可以在程序的任意位置设置断点。这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。
F10
逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句。
F11
逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部(这是最常用的)。
CTRL + F5
开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。

如果你想了解更多快捷键可以去网上搜索哦,我在这里就不一一列举了。

接下来我们来了解这样一件事情,
**

福尔摩斯之旅第三站:
调试时如何查看程序当前信息

**

当我们调试一个程序时,窗口里的选项是我们可以观察到的,我们先来看看自动窗口的效果:




我们发现,自动窗口可以根据程序的执行情况自动选择监视的变量。
我们再来看看监视窗口:



我们发现监视窗口只能监视我们选中的变量,自定义性很强。
我们再来看看局部变量窗口,为了演示方便,我们选择换一个例子:



通过对比自动窗口和局部窗口,我们发现,局部窗口放的是当前环境中执行的上下文变量。

接下来我们看一下内存窗口

我们来打开内存窗口看一下:

下面我们来观察一下i的情况


接下来,我们了解一下反汇编:

点进去之后就会看到汇编语言
接下来我们再简单看看调用堆栈

通过这个窗口,我们可以很好地观察到调用逻辑。当代码比较庞大时,效果很好。
我们的福尔摩斯之旅到这里就先告一段落啦!
希望以上的分享可以帮助大家了解一些调试的知识,本人能力有限,欢迎大家批评指正。相信总有一天我们都可以像福尔摩斯一样,征服所有难题,找到所有bug!!!