学会代码调试

175 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

实用的调试技巧

我们在初入学习编码时,由于对语法的不熟悉,可能会在代码的字里行间出现语法的错误,导致无法运行,还有就是代码没有报错,但是运行的结果与我们想要的结果不同,这些各种结果导致的代码程序出现问题,就是我们常说的bug。

什么是调试

我们常说,在编程圈,所有发生的事情都一定有迹可循,如果没有什么错误就不需要掩盖什么,一旦掩盖,那就必然会有迹象,一名优秀的程序员是一名出色的侦探,每一次调试都是尝试破案的过程。

调试的基本步骤:
  • 发现程序错误的地方
  • 以隔离,消除的方式定位到错误
  • 确定错误产生的原因,提出纠正错误的解决方法
  • 对程序错误予以改正,重新测试
Debug和Release的介绍

Debug通常称为调试版本,它是不做任何优化,便于程序员更好的调试程序

Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户更好的使用。

所以我们说调试就是在Debug版本的环境中,寻找代码中的一些潜伏问题的一个过程。而在Release环境下中我们可以清晰的看到它优化后代码执行的的简洁,省略了一部分步骤,是不支持调试的!

#include<stdio.h>
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("hehe\n");
    }
    
    return 0;
}

上面这段如果在Debug模式去编译,程序的结果是死循环

而如果是Release模式去编译,程序就不会死循环

这就是他们之间因为优化导致的区别

学会调试(windows环境)

调试环境准备

只有在Debug环境下,才能进行正常的调试

熟悉使用必要的快捷键

F5:

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

F9

创建断点和取消断点的重要作用,可以在程序的任意位置设置断点; 这样就可以使得程序在想要的位置随意停止执行,继而一步步执行下去。

F10

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

F11

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

CTRL + F5

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

一般F5与F9配合使用,当我们写了比较长的代码,使用F10/F11逐步调试会很浪费时间;而使用F5和F9就会很方便,我们在想要让程序停下来的位置打上断点,在按F5就可以跳过前面的代码,使程序直接运行到断点处。 当再次按F5调试时会运行到逻辑上的下一处断点!

建议多动手,多去尝试调试来解决问题:

  • 一定要熟练掌握调试技巧。
  • 初学者可能80%的时间在写代码,20%的时间在调试;但是一个程序员可能20%的时间在写程序,但是80%的时间在调试。
  • 这里所讲的是一些简单基本的调试;以后可能会出现很复杂调试场景:多线程程序的调试等,需要我们不断地去尝试解决。
  • 多多使用快捷键,提升效率。

最后了解一下编程中常出现的错误:

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