当前位置 博文首页 > lxkeepcoding的博客:福尔摩斯之旅——实用调试技巧

    lxkeepcoding的博客:福尔摩斯之旅——实用调试技巧

    作者:[db:作者] 时间:2021-09-20 10:48

    一个灵魂问题:你怕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!!!
    在这里插入图片描述

    cs