Coursera 笔记

Module 04 · Debugging and Troubleshooting调试与故障排除

Basic Debugging ConceptsJavaScript 调试基础概念

Coursera ↗

学习目标

观看完本视频后,您将能够:

  • 描述 调试策略
  • 识别 常见的 bug 类型
  • 解释 调试中使用的术语

调试概述

如果您的程序没有生成预期的输出,很有可能您的代码中存在 bug。
因此,调试 是软件开发过程中至关重要的一步,它用于 识别并修复 代码中的 bug。

调试的一个主要步骤是根据 症状 来 识别问题的根源。
不同的策略可以用来定位错误。没有哪一种方法是绝对最好的,每种策略适用于不同的情况,因此了解这些策略是很有帮助的。


常用调试策略

  1. 增量开发
    在增量开发中,每增加一小段代码,就进行一次测试。
    由于增量开发程序的最终代码块较小,因此调试时搜索 bug 的范围也相应缩小,减少了错误的可能性。
  2. 调试工具 (Debugger)
    使用调试工具可以在不生成大量日志文件的情况下,观察程序表达式、设置断点并分析执行时的内存内容。
  3. 二分查找法
    在一大段代码中加入检查点。如果在第一半段代码中没有发现错误,那么错误可能出现在第二半段。
    通过不断重复此过程,可以迅速找到问题所在。
  4. 插入打印语句
    插入打印语句可以帮助调试,但如果信息量过大,可能会变得难以查看。
    在这种情况下,可以使用 自动化脚本 来筛选并呈现关键信息。
  5. 断言法 (Assertions)
    断言用于验证程序是否符合某些特性或不变式。程序在执行到断言失败的位置时会终止,这有助于定位问题。
  6. 回溯法 (Backtracking)
    从问题的源头开始,逆向追溯代码,确定问题发生的路径。
  7. 简化法 (Simplify)
    通过简化代码和输入数据,减少干扰信息,逐步去除不相关部分来定位 bug。
  8. 错误查找工具
    错误查找工具(如静态分析或动态分析工具)有助于检测 安全属性 等问题。
  9. 假设法 (Hypotheses)
    通过复查测试结果、构建假设并设计简单的测试来验证假设,找到最简单的假设并进行测试。

常见的 JavaScript 错误类型

  1. 类型错误 (Type Errors)
    当变量类型不匹配时会发生类型错误。通常,编译器会通过错误信息提示问题所在。
  2. 小错误 (Minor Errors)
    例如拼写错误等简单错误,这些错误在 类型检查器 或其他编译器检查下可能被忽略。
  3. 实现错误 (Implementation Errors)
    即使程序的高级算法正确,底层的数据结构可能被错误处理,导致内部表示不一致。
  4. 概念错误 (Conceptual Errors)
    算法逻辑上的错误,通常需要对算法进行重新审视,修改复杂的设计。

调试中的重要术语

  1. 应用程序日志 (Application Log)
    描述程序中发生的操作。日志非常重要,它可以帮助我们了解程序在问题发生前的行为,从而更好地理解 bug。
  2. 调试器 (Debugger)
    调试器是一种工具,允许程序员逐行执行代码,检查对象,并在执行过程中暂停。
    在代码中加入 debugger 语句,浏览器会在该行暂停并显示正在执行的代码。
  3. 逐步执行 (Stepping)
    逐步执行是指逐行执行程序,以便发现错误所在。
  4. 调用栈 (Stack)
    当程序调用多个函数时,系统会生成一个 函数调用栈,展示函数的调用顺序和当前函数的状态。
  5. 断点 (Breakpoints)
    断点指示调试器暂停程序的执行,允许开发者检查某个特定位置的程序状态,而无需查看整个程序。
  6. 当前行 (Current Line)
    计算机只能一次执行一行代码,程序从当前行开始执行,流向下一行。

总结

调试是 软件开发过程中的一个重要部分。
常见的调试策略包括 增量开发、调试工具、二分查找法、回溯法、简化法 等。
在调试过程中,我们需要理解 错误类型 和调试的 常见术语,并使用相应的工具和方法快速定位并解决问题。

通过掌握这些调试技巧,您能够更加高效地开发和维护 JavaScript 程序,确保 代码的稳定性和可靠性。