CodeGym /课程 /Python SELF ZH /程序调试

程序调试

Python SELF ZH
第 18 级 , 课程 2
可用

8.1 Bug 的出现

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

"bug" 术语的历史

"bug" 这个术语在计算机程序的上下文中是在 1940 年代首次开始使用的。虽然 "bug" 的概念早在计算机出现之前就存在,用来指代各种设备的机械故障。

第一个与计算机技术相关的 "bug" 的文件记载出现在 1947 年 (!) 哈佛大学 Mark II 计算机团队的工作中。团队发现,因为有飞蛾进入机器,导致一个继电器无法工作。他们移除了昆虫,并在日志中记录为 "首次发现真实昆虫的情况" (literal bug)。

虽然这并不是 "bug" 用来指代错误的首次使用,但这个事件变得著名并推动了 "bug" 术语的普及。

程序调试

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

  • 错误检测: 确定表明程序中存在错误的症状。
  • 错误再现: 创建使错误再次出现的条件,以便更好地理解问题的性质。
  • 问题诊断: 使用各种工具和方法分析代码并寻找错误的原因。
  • 错误修复: 通过修改代码来修复错误。
  • 测试: 检查修复情况并测试程序,确保错误得到解决且没有新问题出现。

所以 bug 是程序中任何错误的通用名称,而 debug 是发现和修复这些错误的过程。

8.2 调试工具和方法

日志记录

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

日志记录的例子:


import logging

# 为输出调试信息配置日志记录
logging.basicConfig(level=logging.DEBUG)
            

def divide(a, b):
    # 记录除法尝试
    logging.debug(f"除以 {a} 分之 {b}")
    if b == 0:
        # 如果 b 等于 0,记录错误
        logging.error("尝试除以零!")
        return None

    # 如果 b 不等于 0,执行除法
    return a / b
            
result = divide(10, 2)
print(result)

使用调试器 (Debuggers)

调试器是工具,允许开发者逐步执行程序,设置中断点 (breakpoints),检查变量的值并在程序执行期间更改它们。

流行的调试器:

  1. GDB: GNU Debugger 用于 C, C++ 和其他编程语言。
  2. PDB: 内置的 Python 调试器。
  3. Visual Studio Debugger: 集成在 Microsoft Visual Studio 中的调试器。
  4. PyCharm Debugger: 集成在 PyCharm IDE 中的 Python 调试器。

使用 PDB 的例子


import pdb

def faulty_function(a, b):
    pdb.set_trace()  # 设置中断点
    result = a / b
    return result
            
faulty_function(10, 0)

当程序达到 pdb.set_trace(),它会停止,然后你可以执行调试器命令,如 next (下一步), print (输出变量值) 等等。

我们会在接下来的课程中学习如何使用 PyCharm 内置的调试器进行程序调试。

8.3 使用 debug

通常,debug 涉及积极使用调试工具和实践以识别和修复错误。

设置中断点: 在代码中设置中断点,以在你感兴趣的地方停止程序执行。

逐步执行: 逐步执行程序,观察程序状态和变量值的变化。

变量分析: 在程序执行的不同阶段研究变量和表达式的值,以发现错误数据或逻辑错误。

错误修复: 修改代码以修复发现的错误。

重新测试: 错误修复后,对程序进行测试,以确保错误已解决且没有新问题出现。

听起来简单,对吧?在下一堂课中,我们将详细讨论每个阶段 :)

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