调试 Python 代码过程中经常用到的工具

上一节我们学习了在 PyCharm 里调试 Python 程序要用到的一些基本功能,本节将介绍一些在调试过程中可能要用到的工具。包括 Watches pane、evaluate expression 以及 debug console。

1. 使用监视面板(Watches pane)

如果要计算多个变量或表达式,并同时查看所有变量或表达式,可以为它们创建监视。表达式的值会随着应用程序的每个步骤进行更新,但仅在应用程序挂起时才可见。

我们先创建一个新的 Python 文件 sort.py,然后添加下面冒泡排序的代码,然后通过监视面板查看变量与列表的变化。

def bubble_sort(arr):
    n = len(arr)

    # 遍历所有数组元素
    for i in range(n):

        # Last i elements are already in place
        for j in range(0, n - i - 1):

            if arr[j] > arr[j + 1]:  
                arr[j], arr[j + 1] = arr[j + 1], arr[j]


arr = [64, 34, 25, 12, 22, 11, 90]

bubble_sort(arr)

默认情况下,“Watches pane"处于隐藏状态,显示在"Variable” 中。debug 上面程序, 显示 Debug 工具窗口后, 点击"show watches"切换按钮, 面板就会显示在右侧。

图片描述
PyCharm 提供了多种添加监视的方法

  • 在 Watches Pane 中,单击 + 按钮;
  • 在 Variables 中选择一个或多个项目,并将其拖动到 Watches Pane;
  • 右键单击编辑器中的项目,然后选择"Add to Watches";
  • 在 Variables 中, 右键单击所需项目并选择"Add to Watches"。

图片描述

Tips: 通过工具栏中的 - 按钮, 可以随时移除所填加的监视。

另外, PyCharm 提供了单独的窗口检查(inspect)变量与监视,例如,需要检查多个引用,可以为中每个引用打开一个检查窗口。 在 Debug 工具窗口的 Variable 或 Watches 窗口选择要 Inspect 的项目, 右键从上下文菜单中,选择 inspect。
图片描述

2. 计算表达式(Evaluating Expressions)

使用 PyCharm,不仅可以查看独立变量的值,还可以计算更复杂的表达式,如方法调用、运算符表达式、lambda 表达式类。

1. 计算表达式的最简单方法是使用编辑器工具提示。主菜单 PyCharm/File -> Preference/Settings -> Build, Execution, Deployment -> Debugger -> Data Views

图片描述

鼠标悬停在变量处,就可以显示对应的值:

图片描述

如果变量或表达式的值包含子元素,单击 + 按钮将展开节点并显示所有子元素:

图片描述

2. 使用专用的对话框计算评估表达式。

Evaluate 对话框允许在当前上下文中使用变量和表达式 - 可以对它们执行各种操作和调用方法,然后使用其当前值获得的结果。

以下面为例, 在 Evaluate 对话框 里输入一个新的表达式,然后变量的当前值被代入表达式,点击 Evaluate 按钮或者回车 , 表达式结果返回。

图片描述

Tips: 可以将焦点切换回编辑器以复制其他变量和表达式,如有必要,还可以打开多个 Evaluate 对话框。

PyCharm 也提供了多种方式打开 Evaluate 对话框

  • 按⌥F8 (Alt + F8);
  • 从上下文菜单中选择Evaluate Expression…;
  • 从主菜单中选择Run -> Debug Actions -> Evaluate Expression...
  • 单击 Debug 窗口工具栏上的 Evaluate Expression… 按钮。

图片描述

Tips: 如果选择了某项内容,则变量或表达式将显示在"表达式"字段中。否则,在字段中键入表达式,或从列表中选择以前计算的表达式之一。

3. 使用调试控制台(debug console)

调试控制台使能够查看输出和错误消息。启动调试会话时,PyCharm 将启动调试控制台。控制台是交互式的:可以在其中键入命令、执行命令和查看结果。

图片描述

Tips: 在控制台中可以直接调用程序中定义的变量与方法执行各种操作,帮助做更多的调试。

4. 小结

本节介绍了几个调试中可能用到了工具,因为上面例子都比较简单,只为了说明具体功能,大家可能不能深入体会到这些功能好处。其实这些工具在比较复杂项目中调试中还是比较常用的,因为在项目中定义了很多变量与方法,有些方法或者变量又被引用了多次,这时把关注的对象放在Watches Pane 里随时监控与检查,通过设置,在编辑器内随时查看表达式或者变量的值,这对于调试程序都是非常有帮助的,大家可以在以后工作学习实践中逐渐体会理解。
图片描述