程序调试

Frontend SELF ZH
第 38 级 , 课程 2
可用

9.1 Bug的出现

软件调试是寻找和修复程序中错误或bug的过程。这是软件开发中最有趣的部分之一,有助于确保程序的正确运行。

"bug"一词的起源

"bug"(错误)一词在计算机程序的上下文中首次使用是在20世纪40年代。虽然"bug"这一概念在计算机出现之前就存在,用于指代各种设备中的机械故障。

第一个记录在案的在计算机技术中使用"bug"一词的案例是在1947年(!)哈佛大学Mark II计算机的团队中。团队发现一台机器的继电器因为一只飞蛾而不能工作。他们移除了昆虫,并将此记录在日志中作为"第一个真实的昆虫发现案例"(literal bug)。

虽然这不是首次将"bug"用于指代错误,但这一事件是众所周知的,有助于普及"bug"这个术语。

bug

程序调试

调试是查找、诊断和修复软件中的bug的过程。调试过程包括几个阶段:

  1. 发现错误:确定程序中存在错误的症状。
  2. 重现错误:创建条件以便错误再次出现,以便更好地理解错误的性质。
  3. 诊断问题:使用各种工具和方法分析代码并查找错误原因。
  4. 修复错误:修改代码以消除错误。
  5. 测试:验证修复并测试程序,以确认错误已解决且没有新问题出现。

所以bug是程序中任何错误的总称,而debug(调试)是发现和消除这些错误的过程。

9.2 调试工具和方法

日志记录

在程序代码中添加日志可以跟踪其执行情况,并在程序的不同执行点获取变量和操作的状态信息。对于JavaScript的日志记录,有个很棒的库——winston。

日志记录实例:

JavaScript
    
      const { createLogger, format, transports } = require('winston');

      // 创建一个调试级别的logger
      const logger = createLogger({  level: 'debug' });

      // 除法函数
      function divide(a, b) {
        logger.debug(`将 ${a} 除以 ${b}`);
        if (b === 0) {
          logger.error("尝试除以零!");
          return null;
        }
        return a / b;
      }

      // 使用函数示例
      const result = divide(10, 2);
      console.log(result); // 输出: 5
    
  

使用调试器 (Debuggers)

调试器是允许开发者逐步执行程序、设置断点、检查和更改程序执行期间变量值的工具。

JavaScript的热门调试器:

  • Chrome DevTools:集成在Google Chrome浏览器的调试器
  • Firefox Developer Tools:集成在Mozilla Firefox浏览器的调试器
  • Node.js Debugger:Node.js中用于服务端JavaScript的调试器
  • Visual Studio Code Debugger:集成在Visual Studio Code编辑器中的调试器

在Node.js中使用调试器的实例:

JavaScript
    
      // 导入内置调试模块
      const { inspect } = require('util');

      // 带有错误的函数示例
      function faultyFunction(a, b) {
        debugger; // 设置断点
        let result = a / b;
        return result;
      }

      // 调用带有错误的函数
      console.log(faultyFunction(10, 0));
    
  

当程序达到debugger,它会停止,你可以使用调试器的命令,如向前一步(step over)、进入内部(step into)、退出(step out)、检查变量值等。

我们会在Intellij IDEA中学习程序调试(需要Ultimate Edition版本)。

9.3 使用debug

一般来说,debug包括积极使用调试工具和方法来识别和解决错误。

调试步骤:

  1. 设置断点:在代码中设置断点,以在你感兴趣的地方停止程序执行。
  2. 逐步执行:逐步执行程序,观察程序状态和变量值的变化。
  3. 分析变量:研究程序执行各阶段的变量和值,以发现不正确的数据或逻辑错误。
  4. 修复错误:修改代码以解决发现的错误。
  5. 重复测试:修复错误后测试程序,以确保错误已解决且没有新问题出现。

看起来很简单,对吧?接下来的一节课中,我们会详细探讨每个步骤 :)

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION