VScode进行Python调试

2,306 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

导语

记录使用Vscode进行Python项目的调试过程记录。

环境:MacBook M1 Pro

调试文件配置

第一次使用VScode调试时,首先在当前目录下配置调试文件,可以通过Vscode菜单栏中的 ”运行“ 》”打开配置“来进行配置,该配置文件存储在当前文件夹下的.vscode/launch.json。

image.png

其信息如下:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: 当前文件",
            "type": "python",
            "request": "launch",
            "justMyCode": false,
            "program": "${file}",
            "console": "integratedTerminal",
        }
    ]
}

这里有几个比较重要的字段:

  • type:即调试的是一个python文件;
  • justMyCode:是否只调试用户自己编写的代码文件,设置为false时将无法在python官方库中进行断点调试;

除此之外,我们可能还会有一些其他的需求,比如设置运行时的系统环境变量、脚本运行的命令行参数以及指定特定的Python解释器。

可以通过以下几个参数来实现:

  • python:指定Python的解释器路径;
  • env:运行程序文件时加入的系统环境变量(仅对当前运行生效,如设置CUDA_VISIBLE_DEVICES:"3"来指定pytorch模型运行时所使用的GPU)
  • args:使用列表形式将运行时所使用的所有命令行参数列出。

综合以上参数,一个完整的示例记录如下:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "python": "/home/jxqi/anaconda3/envs/picard/bin/python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "justMyCode": true,
            "env": {"CUDA_VISIBLE_DEVICES":"3"},
            "args": ["configs/train_t5_small_imdb.json"]
        }
    ]
}

最后需要注意的是:在启动调试时,要确保待执行的python文件是当前的编辑器窗口,在这样的情况下调试才是对该文件进行调试执行。

调试过程选项

首先选择要暂停调试的地方进行断点添加,如下图所示:

image.png

断点是最基本的调试功能。我们只需点击行号左边的空白处,VScode就会出现一个小红点,在启动调试后,当程序运行到这里时就会自动暂停。

下面,我们启动调试

image.png

程序会自动运行到断点位置暂停,如上图所示:

左上角可以查看当前所有的变量,并且可以添加想要监视的表达式,下方展示了程序的调用堆栈和所设置的所有断点信息。

在命令行界面,可以选择打开”调试控制台“选项进行以下更加自由的表达式处理:

image.png

最后来说明一下调试的操作命令:

  • F5 继续:即继续运行到下一个断点位置

image.png

  • F10 单步跳过:即在当前文件中运行一行(如果是函数处理,则不会进入到函数内部)

image.png

  • F11 单步调试:将会进入到这一行的子函数中(可能会跳到其他文件中)

image.png

  • shift + F11 单步跳出:跳出由F11进入的子函数 回到被调用的函数外。

image.png

  • shift +command + F5 重启:重启调试

image.png

  • shift + F5 停止:终止调试

image.png