9.通用调试方法详解

一、前言

对于程序员来说,想要写出一个大型、完整、可靠的程序,乃至提升自己的编程能力,调试是一个必不可少的技能,它的目的在于即使发现并解决程序中出现的异常错误。

程序错误一般有两种:

  1. 语法错误
  2. 逻辑错误

语法错误很简单,就是你没有按照某种语言的规则去写代码,编译器无法正常识别、编译你的代码。

这种错误的修复比较简单,因为编译器一般都会直接给你指示出来。

有时候可能也并不简单,比如C++中的STL模板……,只要你填错一个参数,编译器就会给你报出几大屏幕的错误,让你难以识别,这种情况下,很多时候就只能凭借经验去修复。

比如vs中,如果我调用了一个不存在的函数,那么编译器就会直接报错:

image-20231031160207322

这种修复起来大多数还是比较简单的,同时也用不着、也无法进行“调试”。

调试的主要作用是识别、修正程序的逻辑错误,使用它的前提是,你的代码已经能够跑起来了。

比如一个经典的错误:

image-20231031160406544

从程序语法上来讲,这段代码并没有任何的错误,但只要你上过小学都知道,除数是不能为0的。

由于语法没有问题,所以这段代码能够通过编译器的检查,并将其编译,但由于逻辑存在问题,你只要运行它,就肯定会报错:

image-20231031160626928

如果你和我一样,都习惯于使用vs,那么上面这种报错信息我相信你时常能看到。

这种逻辑错误,很多时候也被称为“异常”,也就是上图信息中提到的,并且后面还会附带一段信息描述:Integer division by zero,意思就是整数被0除,触发了这个异常。

这种简单的逻辑错误,一般编译器也同样能够为你精确指出来!

但对于稍微大一点的项目,编译器指出的错误可能与你所见的并不完全一致。

因为它一般显示的是比较底层、浅显的错误,而由于我们很多时候用的都是第三方库,又或者代码量很大,你很难去一行一行追查、查看看。

而这个时候一般就需要用到调试了。

二、断点

目前主流语言中,尤其是那些由大公司出品、用户量较多的语言,一般都会有一个叫做“断点”的调试功能。

比如C++、python、java、C#等等等等,这是比较主流的调试方式。

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux