一、两类程序错误程序发生错误会有两种:一种是语法错误(syntax error),一种是逻辑错误(semantic erro)。对于前者,编译器会检查出错误,给出错误说明,常见的错误是类型不匹配。对于后者,就需要对程序进行调试(debug),因为代码语法上没有问题,通过了编译和链接,进入执行阶段,但是结果部分或全部不符合预期,或者进入死循环,或者程序崩溃(crashed)。二、程序调试的4种方法程序调试方法有:(1)打印中间数据(2)注释掉一部分代码,缩小运行代码的范围(3)使用日志(4)使用专门的调试程序(debugger)
简单的调试方法,可以加入几条打印语句,打出中间过程的数据。通过分析数据,很多情况下都可以找到程序代码中的问题。对于C++,可以使用cout语句,然而还有更好的办法,用cerr语句,二者不同之处在于,cout语句有缓冲区的,cerr是不设缓冲区而立即送到控制台。为了找出问题所在,可以将一部分代码先注释掉,这样运行的代码范围缩小,有利于找出问题。打印中间数据的方法非常有用,但是也有一些缺点:增加打印语句,查看数据值,找到问题,修改代码,解决问题,最后删除打印语句,这个过程会带来额外的工作量。如果程序比较复杂,需要增加打印语句的地方很多,这个工作量相应增大。调试器(debugger)是专门用来调试程序员代码的程序,它有两个基本功能:(1) 接管程序员的代码运行,精确控制程序执行,比如逐行运行、逐过程执行。(2)查看中间结果。三坊七巷最初的调试器,是采用晦涩难懂的命令行方式,而现代的调试方法,已经将调试器集成到IDE中(IDE指集成开发环境,代码编辑、编译、构建、运行和调试)。学习和掌握调试器的使用方法,对于程序员来说非常重要。因为随着程序越来越复杂,花在调试上的时间将会非常巨大。掌握了调试器使用后,可以大大提高调试效率,节省可观的调试时间。