程序猿必备技能——调试

目录

什么是bug?

调试的基本步骤

Debug 和 Release的介绍

windows环境调试(VS2022)所有的编译器都是大同小异

调试时查看程序当前信息

1.查看临时变量得值

使用调试,解决代码中的bug

编程常见的错误


什么是bug?

导致计算机不能正常运作,正常运行的东西

程序由程序员来编写,检查问题,然后交给测试人员,在进行一轮检查,最后才会面向用户使用

所以每个程序猿都应该擅长于使用调试,用来解决问题

调试的基本步骤

1.发现程序错误的存在

2.以隔离,消除等方式对错误进行定位

3.确定错误产生的原因

4.提出纠正错误的办法

5.程序错误予以改正,重新测试

Debug 和 Release的介绍

Debug(调试版本): 包含调试信息,并且不作任何优化,便于程序员使用

Release(发布版本)往往会进行各种优化,使得程序在代码大小和运行速度都是最优的,便于用户很好的使用

windows环境调试(VS2022)所有的编译器都是大同小异

学会快捷键

F5 :启用调试,经常跳到下一个断点处

F9创建断点和取消断电,在程序的任意位置设置断点,以提高效率

F10:逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者是一条语句

F11:逐语句,每次执行一条语句,可以使执行逻辑进入函数内部(一般都会使用F11)

F10不会进入子函数内部会直接得结果

调试时查看程序当前信息

调试起来,程序中有值之后,然后点击“调试” ——> "窗口"——>"监视"内存调用堆栈“  反汇编寄存器

注:只要调试起来,这些才会出现

1.查看临时变量得值

(1)监视

“自动窗口”:将程序中的一些变量自动放入窗口中让我们观察

“局部变量”:将上下文环境中的局部变量自动放入窗口中

“监视”:手动输入想观察的数据,监视可以打开四个窗口

(2)内存

一列表示一个字节的数据,以十六进制显示

(3)调用堆栈

显示外部代码可以看到外部函数调用关系,不用编译器调用main函数也会有所不同

(4)反汇编:

可以看到C语言代码被翻译成什么样的汇编(在不同的编译器汇编不一样),该代码在底层的实现原理

(5)寄存器:

查看寄存器信息(也可以监视查看寄存器

使用调试,解决代码中的bug

例:

int main()
{
    int i = 0;
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    for(i = 0; i <= 12; ++i)
    {
        arr[i] = 0;
        printf("nxbw\n");    
    }

    return 0;
}

运行之后:

可以看到运行后,就变成了死循环

为什么不会变成这样?

1.main是一个函数,它开辟空间需要调用堆栈,可以看到main函数中的数据,全部都是使用的栈区资源,栈区是向下增长的,栈区的内存使用规则是先使用高地址,在使用低地址

2.数组在内存中是连续储存的,随着下标的增加,地址由低到高

3.由于i创建在数组arr之前,所有i先使用了栈区中的高地址区,即:数组运用越界操作就可能到导致访问到i,造成死循环

编程常见的错误

1.编译错误(语法错误)

2.链接错误(链接错误,出现在链接期间)

3.运行时错误(调试解决)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值