VS调试技巧

1.什么是Bug?

        Bug的创始人格蕾丝·赫柏(Grace Murray Hopper),是一位为美国海军工作的电脑专家,也是最早将人类语言融入到电脑程序的人之一。而代表电脑程序出错的“bug” 这名字,正是由赫柏所取的。

        1945年9月9日,下午三点。哈珀中尉正领着她的小组构造一个称为“马克二型”的计算机。这还不是一个完全的电子计算机,它使用了大量的继电器,一种电子机械装置。第二次世界大战还没有结束。哈珀的小组日以继夜地工作。机房是一间第一次世界大战时建造的老建筑。那是一个炎热的夏天,房间没有空调,所有窗户都敞开散热。

突然,马克二型死机了。技术人员试了很多办法,最后定位到第70号继电器出错。哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布贴到“事件记录本”中,并注明“第一个发现虫子的实例。”

        从此以后,人们将计算机错误戏称为虫子(bug),而把找寻错误的工作称为(debug)。

2.调试是什么

2.1 调试是什么

调试 (英语: Debugging / Debug ),又称除错,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。

 2.2 调试的基本过程

  • 发现程序错误的存在
  • 以隔离、消除等方式对错误进行定位
  • 确定错误产生的原因
  • 提出纠正错误的解决办法
  • 对程序错误予以改正,重新测试

 2.3 Debug和Release的介绍

Debug 通常称为调试版本 ,它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release 称为发布版本 ,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

 

3.Windows环境下VS调试技巧

3.1 调试环境准备

在Windows下,VS作为开发环境选择Debug,代码才可以进行调试

在Linux下,开发环境调试工具是gdb

 

3.2 VS常用快捷键

以下快捷键为VS常用快捷键,只需掌握以下快捷键,就可以实现大部分调试

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

3.3 调试时监视相关信息

监视变量的值

  • 以下监视操作需要先F5进行调试后再进行监视
  • 可以在监视窗口中输入需要监视的变量进行监视
  • 同时也可以监视数组的变换

监视数组

查看内存信息

查看调用堆栈

查看汇编信息

查看寄存器信息

4.常见的编译错误

  1.  编译型错误  直接看错误提示信息(双击),解决问题。或者凭借经验就可以搞定。相对来说简单。
  2.  链接型错误 看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是标识符名不 存在或者拼写错误
  3.  运行时错误  借助调试,逐步定位问题。最难搞。

5. 调试实例分析

实现代码:求 1 +2 +3 ...+ n! ;不考虑溢出
int main() {
    int i = 0;
    int sum = 0;//保存最终结果
    int n = 0;
    int ret = 1;//保存n的阶乘
    scanf("%d", & n);
    for (i = 1; i <= n; i++) {
        int j = 0;
        for (j = 1; j <= i; j++) {
            ret *= j;
        }
        sum += ret;
    }
    printf("%d\n", sum);
    return 0;
}

 在输入3时,输出结果应该为9,但是实际输出15

这时候可以通过调试找出问题

先在12行处打上断点,可通过点击左侧或者F9实现,在F5进入调试。

 

开始调试后,可以在监视页面加入需要监视的变量,之后F11逐句调试

注意:遇到scanf时会自动打开控制台,需要手动输入值后才可以进行调试

经过调试发现ret的值出现问题

由于每次求阶乘时,没有对ret的值进行初始化,因此ret将继承前一次阶乘的值,导致程序出现bug

1!+ 2!+ 3!变为 1! +  2!*1!+ 3!*(2!*1!)

在进行如下修改后程序正常运行

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值