教程:在 Visual Studio 调试器中运行代码

本文介绍教程系列中的步骤 4: 在 Visual Studio 中使用 Python

Visual Studio 提供管理项目、丰富的编辑体验、 交互式窗口和 Python 代码功能齐全的调试的功能。 在本教程系列的步骤 4 中,使用 调试器 逐步运行代码,包括循环的每个迭代。 在 调试器中,只要某些条件为 true,就可以暂停程序。 在暂停程序时,可以随时检查整个程序状态并更改变量的值。 此类作对于跟踪程序 bug 至关重要,还有助于遵循确切的程序流。

在本教程的步骤 4 中,你将了解如何:

  • 在 Visual Studio 中的 调试器 中运行 Python 代码
  • 设置断点和条件
  • 检查程序状态和更改变量
  • 浏览 调试器 窗口和作

先决条件

准备 Python 文件

若要准备调试练习,请按照以下步骤更新 Python 项目文件,以包含更可靠的代码:

  1. 在编辑器中打开 Python 项目文件(.py)。

  2. 将文件中的代码替换为以下代码。 此版本的代码扩展了函数, make_dot_string 以便可以在调试器中检查其离散步骤。 它将循环移动到 for 函数 main 中,然后通过调用函数 main 显式运行该循环:

    from math import cos, radians
    
    # Create a string with spaces proportional to a cosine of x in degrees
    def make_dot_string(x):
        rad = radians(x)                             # cos works with radians
        numspaces = int(20 * cos(rad) + 20)          # Scale to 0-40 spaces
        st = ' ' * numspaces + 'o'                   # Place 'o' after the spaces
        return st
    
    def main():
        for i in range(0, 1800, 12):
            s = make_dot_string(i)
            print(s)
    
    main()
    

开始调试

现在,你已准备好开始在 调试器中检查更新的 Python 代码。

  1. 通过在工具栏上选择 “调试>开始调试 ”或使用 F5 键盘快捷方式来确认代码是否正常工作。 这些命令在 调试器中运行代码。

    调试器不会检测到任何问题,因此程序成功运行。 此时会打开一个输出窗口,可以看到余弦波模式的几次迭代。 选择任意键以关闭输出窗口。

    小窍门

    若要在程序完成后自动关闭输出窗口,请选择 “工具>选项”,展开 “Python>调试 ”选项卡,并清除 进程正常退出时等待输入 选项。

  2. 使用以下方法之一在 for 循环语句上设置断点:

    • 在代码行的左边距中选择。
    • 右键单击代码行,然后选择“断点插入断点>”。
    • 将插入插入插入点放在代码行中,然后选择 “调试>切换断点 ”(或使用 F9 键盘快捷方式)。

    断点在标记点停止执行代码,以便可以检查程序状态。 在每个设置了断点的行上都会出现一个红点。

    显示如何在 Visual Studio 中的调试器中设置断点的屏幕截图。

  3. 再次启动 调试器F5)。 程序的运行代码在具有设置断点的行中停止。 现在可以检查调用堆栈,并检查正在运行的程序代码的此状态的变量。

    Visual Studio 提供了多种观察程序代码和执行数据的方法,包括以下窗口:

    • 调用堆栈显示程序代码的函数和方法调用的历史记录。
    • 作用域内定义的变量将显示在 “自动” 窗口中。
    • “局部变量”视图显示 Visual Studio 在当前范围(包括函数)中找到的所有变量,甚至在代码中定义它们之前也是如此。

    若要查看可用窗口和作的完整列表,请选择 “调试>Windows”。

    可以在遇到断点时打开 调试器 窗口以查看程序状态:

    调试器窗口的屏幕截图,显示 Visual Studio 在设置断点处停止时的程序状态。

使用调试器作

当 Visual Studio 在断点停止代码执行时,可以使用多个命令逐步执行代码或运行代码块,然后再再次中断。 这些命令在 Visual Studio 的几个位置可用,包括 调试器 工具栏、调试 菜单、代码编辑器中的右键单击上下文菜单,以及通过键盘快捷方式。

Visual Studio 窗口顶部的 调试器 工具栏提供对最常见调试命令的快速访问:

Visual Studio 中调试器工具栏的屏幕截图。

下表汇总了这些命令,因为它们在工具栏上从左到右显示:

行动 快捷方式 DESCRIPTION
Continue F5 运行代码,直到到达下一个断点或程序完成为止。
全部中断 Ctrl+Alt+ 暂停长时间运行的程序。
停止调试 转变+F5 系列 在当前点停止程序,然后退出 调试器
重启 Ctrl+转变+F5 在当前点停止程序,并从 调试器中开始重启程序执行。
显示下一语句 Alt+Num+\ 返回到在代码中运行的下一个语句。 此命令可帮助你在代码中找到 调试器 停止的位置。
Step Into F11 运行下一个语句并停止。 如果下一个语句是对函数的调用, 调试器 将单步执行该函数并在第一行停止。
Step Over F10 运行下一个语句,包括调用函数(运行其所有代码)并应用任何返回值。 此命令允许你轻松跳过不需要调试的函数。
步出 ShiftF11+ 运行代码,直到当前函数的末尾,然后单步执行调用语句并暂停。 当不需要调试当前函数的其余部分时,此命令非常有用。

按照以下步骤在 Python 代码中使用 调试器 作:

  1. 使用“单步故障转移”作单步执行for循环语句。

    单步执行 会导致 调试器 运行当前代码行,包括任何调用的函数,并立即再次暂停。 单步执行后,请注意变量 i 现在在 “局部变量 ”和 “自动” 窗口中定义。

  2. 单步执行 下一行代码,用于调用 make_dot_string 函数。

    在此实例中, “单步执行” 会导致 调试器 运行完整的 make_dot_string 函数,并在函数返回后暂停。 除非存在单独的断点,否则 调试器 不会停止在函数内部。

  3. 继续多次单步执行代码,并观察 局部变量自动 窗口中的值如何更改。

  4. 在“ 局部变量 ”或“ 自动” 窗口中,双击变量的 “值 ”列以编辑该值。 在此示例中,将 s 变量的值更改为 'Hello, Python Application'。 请务必将值括在单引号中。 选择 Enter 或值以外的任何区域以应用更改。

    显示如何在 Visual Studio 中调试期间更改“局部变量”窗口中变量的值的屏幕截图。

  5. 使用 单步执行 代码,直到调用 make_dot_string 函数为止。

    对于函数, 单步执行作 会导致 调试器 同时调用函数,并单步执行函数代码。 调试过程位于函数内时,可以检查其局部变量,并专门逐步执行其代码。 在此示例中, “单步执行” 作将移动到函数中 make_dot_string

  6. 继续单步执行 步执行,直到函数 make_dot_string 返回。

    到达函数代码的make_dot_string末尾时,下一步将使用变量中的s新返回值将调试器for返回到循环。

    再次单步执行语句时print,请注意语句上的print“单步执行作”不会进入该函数。 此行为是因为函数 print 未用 Python 编写。 它是 Python 运行时中的本机代码。

  7. 继续使用 “单步执行” ,直到再次 make_dot_string 进入函数,然后使用 Step Out 并注意到 调试器 返回到 for 循环。

    使用 Step Out调试器 将运行函数的其余部分,然后在调用代码中自动暂停。 在逐步执行较长函数的某些部分并结束对函数的观察之后,此作非常有用。 单步执行 剩余代码,或直到它到达调用代码中设置的显式断点为止。

  8. 使用 ContinueF5) 继续运行程序,直到到达下一个断点。 由于循环中 for 设置了断点,因此在下一次迭代中中断。

    可以通过观察“局部变量”窗口中变量的更改值s来确认程序是否继续执行。

使用断点条件

单步执行循环的数百次迭代可能很繁琐,因此 Visual Studio 允许向断点添加 条件 。 设置断点条件时, 调试器 仅在满足条件时才在断点处暂停程序。

以下步骤演示如何在循环语句上 for 定义断点条件,以便 调试器 仅在变量的值 i 超过 1600 时暂停:

  1. 若要设置断点条件,请右键单击红色断点并选择 “条件 ”或使用键盘快捷方式 Alt+F9>C

  2. 在“ 断点设置” 弹出对话框中,配置以下设置以创建 条件

    1. 将条件类型设置为 条件表达式

    2. 将条件求值定义为 True

    3. 输入 i > 1600 为条件值。

    4. 选择 关闭

    显示如何在 Visual Studio 中的调试器中设置条件断点的屏幕截图。

  3. 选择 F5 以继续调试和程序执行。 观察程序在到达条件断点之前运行多次迭代。

    可以确认 调试器 在到达条件断点时正确暂停程序执行。 满足条件后,“局部变量”窗口将显示i变量值。1608

  4. 若要运行程序以完成,可以禁用断点并继续执行程序。

    1. 将鼠标悬停在红点上并选择“ 禁用”,或右键单击红点并选择“ 禁用断点”。

    2. 选择 “继续 ”(或按 F5)运行程序。

    程序结束时,Visual Studio 将停止调试会话并返回到编辑模式。

    还可以删除断点。 选择红点或右键单击该点,然后选择“ 删除断点”。 此作还会删除任何定义的条件。

小窍门

在某些情况下(如启动 Python 解释器本身失败),程序完成后 Python 输出窗口可能会立即关闭,而不会暂停并显示 “按任何键继续 提示”。 若要强制暂停和提示,请将-i参数添加到“调试”选项卡上的“运行>解释器参数”字段。此参数使 Python 解释器在代码运行后进入交互模式。 程序等待你选择 Ctrl+Z+Enter 关闭窗口。

后续步骤