实用调试技巧(1)

简介: 实用调试技巧(1)

一、什么是bug?

第一次被发现的导致计算机错误的是飞蛾,也是第一个计算机程序错误。

bug的由来:

bug(原意是臭虫或者虫子),第一代计算机是由许多庞大的真空管组成,并利用大量的电力来使真空管发光。引得一只小虫子Bug钻进了一支真空管内,导致整个计算机无法工作。研究人员费了半天时间,总算发现原因所在,把这只小虫子从真空管中取出后,计算机又恢复正常。后来,Bug这个名词就沿用下来。

二、调试是什么?有多重要?

所以发生的事都是有迹可循,如果问心无愧,也就无需掩盖也就是没有迹象。如果问心有愧,那一定有迹象,迹象越多越容易顺通摸瓜,这就是推理的过程。

排查问题的时候,我们要做到:我们做什么?我们想做什么?我是怎么做的?做的过程中写了什么代码?


2.1 调试是什么?

调试(英语:Debugging/Debug):又称除错,发现一个程序错误的过程。


2.2 调试的基本步骤

发现程序错误的存在

定位排查错误

确定错误产生的原因

提出纠正错误的解决方法

对程序错误进行改正,重新测试

2.3 Debug和Release的介绍

Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。

Release称为发布版本(没法调试),它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,方便用户很好地使用。

软件上线的过程:

代码在Debug环境下代码展示:

代码在Release环境下代码展示:

代码在Release环境下代码展示:

Debug和Release比较,可以看出Release比Debug的程序代码小,代码也得到了优化, 但是我们不知道是怎么优化的。

下面我们继续看一个例子,探究一下:

#include <stdio.h>
int main()
{
    int arr[10] = { 0 },i;
    for (i = 0; i <= 12; i++)
    {
        arr[i] = 0;
        printf("hehe\n");
    }
    return 0;
}

在Debug版本下执行程序,直接崩溃

在Release版本下执行程序,执行成功

变量在内存中开辟的顺序发生了改变,影响到了程序执行的结果。

结论:这就是优化导致的,

三、windows环境调试介绍

3.1 调试环境准备

在环境中选择debug选项,才能使代码正常调试:

3.2 快捷键

最常用的几个快捷键:

F5:

启动调试,经常用来直接跳到下一个断点处。

F9:

创建断点和取消断点。

断点的作用:可以在程序的任意位置设置断点,这样就可以使程序在想要的位置上任意停止执行,继而一步步执行下去。

F10:

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

F11:

逐语句,就是每次都执行一条语句,但是这个快捷键可以使我们的执行逻辑进入函数内部;更加细致,可以进入函数观察函数执行的过程。(这是最常用的)

CTRL+F5:

开始执行不调试,如果你想让程序直接运行起来而不调试就可以直接使用。

注意:

如果说在你的电脑上f9、f10、f11不起作用,那是fn这个键的问题,关掉fn就可以了。(或者fn+f5;fn+f9;fn+f10;fn+f11)

展示:

扩展:


Ctrl+Tab 切换页面

Ctrl+D 粘贴光标所在行代码

Ctrl+/ 行注释掉/取消行注释

Ctrl+Shift+/ 块注释/取消块注释

Tab 向右缩进(两格)

Shift+Tab 回退一个制表符

Ctrl+Enter 当前行之前开辟一行

Ctrl+Z 撤销

Ctrl+Y 反撤销

Ctrl+A 全选

Ctrl+C 复制

Ctrl+V 粘帖

Ctrl+S 保存

Ctrl+F 快速查找

Ctrl+Shift+F 在文件中查找

Ctrl+H 快速替换

Home 回到行首

End 跳到行尾

Shift+Left/Right 向左/向右选中字符

Ctrl+Left/Right 以一个单词为粒度向左/向右移动光标

F4 显示属性窗口

F12 转到定义

Shift+Tab 取消制表符

F5 运行调试

Ctrl +F5 运行不调试

Shift+F5 结束调试

Ctrl+K+C 注释选中内容

Ctrl+K+U 取消注释内容

Ctrl+W+X 打开工具箱

Ctrl+E+W 自动换行

Ctrl+M+M 隐藏或展开当前嵌套的折叠状态

Ctrl+L 删除一行内容

Ctrl+E+D 排版整个文档格式

F11 逐语句调试

F10 逐过程调试

F9 启用/停止断点

Ctrl+Shift+F9 删除全部断点

Ctrl+E+S 查看空白

Ctrl+Alt+L 打开解决方案资源管理器。

F1 显示MSDN帮助。

Shift+Alt+F10 导入命名空间

Ctrl+F4 关闭当前标签窗口

Ctrl+Shift+空格键 查看参数信息

Shift+Alt+C 添加类

光标快速切换到下一行:Ctrl + Shift + Enter

光标快速切换到上一行:Ctrl + Enter

3.3 调试的时候查看程序当前的信息

3.3.1 查看临时变量的值

在调试开始之后,用于观察变量的值也可以观察地址。

3.3.2查看内存信息

在调试开始之后,用于观察内存信息

3.3.3 查看调用堆栈

在调试开始之后

通过调用堆栈,可以清晰的反映函数的调用关系以及当前调用所处的位置。

3.3.4查看汇编信息(反汇编)

在调试开始之后

方法一:右击鼠标,选择转到反汇编

方法二:

然后就可以切换到汇编代码

3.3.5 查看寄存器信息

可以查看当前运行环境的寄存器的使用信息

四、结论

在我们编写程序的过程中,会遇到很多bug,我们要去总结,迎难而上。

一定要熟练掌握调试技巧;平常写代码,多去调试,敢于调试,去定位问题,才能有进步。这里我写的都是一些简单的调试方法,务必要掌握。


相关文章
|
4月前
|
程序员
调试技巧vs2022
调试技巧vs2022
|
4月前
|
C++
VS调试技巧
VS调试技巧
27 0
|
12月前
|
网络协议 C++
继续分享 5 个实用的 vs 调试技巧
继续分享 5 个实用的 vs 调试技巧
|
23天前
|
JavaScript 前端开发
调试技巧
【8月更文挑战第28天】
33 9
|
3月前
|
NoSQL 程序员 Linux
实用调试技巧(1)
实用调试技巧(1)
31 7
|
3月前
实用调试技巧(2)
实用调试技巧(2)
28 0
|
9月前
|
安全 程序员 Windows
实用调试技巧
实用调试技巧
77 0
|
10月前
|
程序员 C语言
|
10月前
|
程序员 编译器
实用调试技巧(上)
实用调试技巧
|
12月前
|
C++ 索引
再分享 5 个 vs 调试技巧
再分享 5 个 vs 调试技巧