一、前言
对于程序员来说,想要写出一个大型、完整、可靠的程序,乃至提升自己的编程能力,调试是一个必不可少的技能,它的目的在于即使发现并解决程序中出现的异常错误。
程序错误一般有两种:
- 语法错误
- 逻辑错误
语法错误很简单,就是你没有按照某种语言的规则去写代码,编译器无法正常识别、编译你的代码。
这种错误的修复比较简单,因为编译器一般都会直接给你指示出来。
有时候可能也并不简单,比如C++中的STL模板……,只要你填错一个参数,编译器就会给你报出几大屏幕的错误,让你难以识别,这种情况下,很多时候就只能凭借经验去修复。
比如vs中,如果我调用了一个不存在的函数,那么编译器就会直接报错:
这种修复起来大多数还是比较简单的,同时也用不着、也无法进行“调试”。
调试的主要作用是识别、修正程序的逻辑错误,使用它的前提是,你的代码已经能够跑起来了。
比如一个经典的错误:
从程序语法上来讲,这段代码并没有任何的错误,但只要你上过小学都知道,除数是不能为0
的。
由于语法没有问题,所以这段代码能够通过编译器的检查,并将其编译,但由于逻辑存在问题,你只要运行它,就肯定会报错:
如果你和我一样,都习惯于使用vs,那么上面这种报错信息我相信你时常能看到。
这种逻辑错误,很多时候也被称为“异常”,也就是上图信息中提到的,并且后面还会附带一段信息描述:Integer division by zero
,意思就是整数被0除,触发了这个异常。
这种简单的逻辑错误,一般编译器也同样能够为你精确指出来!
但对于稍微大一点的项目,编译器指出的错误可能与你所见的并不完全一致。
因为它一般显示的是比较底层、浅显的错误,而由于我们很多时候用的都是第三方库,又或者代码量很大,你很难去一行一行追查、查看看。
而这个时候一般就需要用到调试了。
二、断点
目前主流语言中,尤其是那些由大公司出品、用户量较多的语言,一般都会有一个叫做“断点”的调试功能。
比如C++、python、java、C#等等等等,这是比较主流的调试方式。
其使用方式一般都是用鼠标在你想要看的代码最前面,点一下即可,比如vs
中:
比如vscode
中:
又比如pycharm
中:
只需要你鼠标在某一行前面点上一下,它就会被打上“断点”。
断点的作用如其名,就是当程序运行起来之后,一旦运行到这行代码了,就会被打断,停下来,不再往下执行了。
这种状态也就是调试模式,这里以vs
为例,其它IDE都是一样的,不再赘述:
由于这次我在调用这个函数的时候打上了断点,所以当我运行程序后,一旦运行到这行代码,就会被强制暂停下来了,这便是进入了调试模式。
一旦进入这个模式,就会出现一堆只有调试模式才会有的图标、按钮,也就是上图箭头所指向的那几个箭头图标。
这里介绍一下最常用的几个:
从左到右:
- 继续:因为此时程序已经在这行代码停下来了,如果你想要让它继续执行下去,那就按这个按钮即可。
- 停止:红色方框是停止调试的意思,点下它,程序直接终止,不再执行。
- 重启:逆时针箭头,是重新启动运行的意思,相当于终止当前程序,然后重新启动一个。