在VSCode中调试其他软件执行的python文件

在VSCode中调试其他软件执行的python文件

0. 实际场景

我有一段python代码想在Metashape中运行,但是又想在中间某一步停下来查看变量值。由于Metashape的python环境不容易在vscode中配置,所以直接用vscode调试单个文件的方式无法实现这个想法。还好,通过Python Debugger插件和在代码中使用debugpy库,可以得到一种新的调试方式,下面介绍详细步骤。

1. 在VSCode中安装插件Python Debugger

在这里插入图片描述

2. 配置launch.json

打开要执行的python文件所在文件夹,配置调试方式:
点击下图所示的“创建launch.json文件”:
在这里插入图片描述
vscode的中上部弹出菜单:
在这里插入图片描述
选择“Python Debugger”,弹出调试配置选项菜单:

在这里插入图片描述
选择“远程附加”,然后依次输入远程主机ip(默认为localhost,代表本机)和端口号(默认5678,也可以改为其他值):

在这里插入图片描述
在这里插入图片描述
完成后,在.vscode目录下自动生成了调试配置文件launch.json,内容如下:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python 调试程序: 远程附加",
            "type": "debugpy",
            "request": "attach",
            "connect": {
                "host": "localhost",
                "port": 5678
            },
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}",
                    "remoteRoot": "."
                }
            ]
        }
    ]
}

这条配置的意思是,将调试器附加到localhost:5678端口。

为了使断点功能正常工作,我们还需要修改上面的json内容

  1. "pathMappings"属性在本机调试时无需设置,因此应删去;
  2. 同时为了这个调试配置好记,把"name"属性的值改为"Python本机端口附加调试"

修改后的launch.json如下:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python本机端口附加调试",
            "type": "debugpy",
            "request": "attach",
            "connect": {
                "host": "localhost",
                "port": 5678
            }
        }
    ]
}

3. 修改代码

调试配置已经完成,接下来就是让代码监听localhost:5678端口。

首先给出修改前的python代码:

import os
import numpy as np


if __name__=='__main__':   
    a = np.array([0,0,1,1])
    b = a*2
    c=a+b
    print(c)

想让代码中途停下来,不仅要让代码监听localhost:5678端口,还需要调用debugpy.breakpoint()

import os
import debugpy
if __name__=='__main__':
    if debugpy.is_client_connected() is False:##### 防止重复listen
        debugpy.listen(("localhost", 5678))#####
        debugpy.wait_for_client()#####
    print('wait_for_client called')
    debugpy.breakpoint()#####
    a = np.array([0,0,1,1])
    b = a*2
    c=a+b
    print(c)

在修改过的代码中,

    if debugpy.is_client_connected() is False:##### 防止重复listen
        debugpy.listen(("localhost", 5678))#####
        debugpy.wait_for_client()#####

用于让debugpy监听本机5678端口,并且等待客户端(也就是VSCode的Python Debugger)连接;
连接上调试器后,python继续往下执行代码,直到遇到debugpy.breakpoint()语句暂停执行,在VSCode中停下。此时便可查看各变量名,并且开始单步调试。

4. 运行代码,启动Debugger

完成2、3两步配置之后,先在Metashape中运行python脚本,再在VSCode中按配置的调试信息启动调试器,即可。
代码执行在debugpy.breakpoint()后一句暂停。

大意的同学可能会遇到如下图所示的问题:尝试设置断点发现,本应是红色实心圆的断点标志成了空心圆。也就是说,无法在目标行单击设置断点在这里插入图片描述
这是由于,launch.json中默认生成的"pathMappings"属性还没有删去。删掉之后再运行,即可解决问题。

或者,实在不愿意删去这个属性,那就把"localRoot"和"remoteRoot"改成正确的路径,也可以解决问题。

            "pathMappings": [
                {
                    "localRoot": "本地路径",
                    "remoteRoot": "远程路径"
                }
            ]

这个属性实际上在Docker容器代码调试和远程调试中非常有用。

5.参考

VSCode官方文档——Debugging
debugpy代码仓库
调试在容器中运行的python代码

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: VSCodelaunch.json文件是用来配置Python调试器的,可以通过以下步骤进行配置: 1. 打开VSCode,点击左侧的调试按钮,然后点击“创建launch.json文件”。 2. 在弹出的窗口,选择“Python”作为调试环境。 3. 在接下来的窗口,选择“Python文件”作为调试目标。 4. 在launch.json文件,可以配置Python解释器的路径、调试选项、环境变量等。 5. 配置完成后,保存launch.json文件,然后点击调试按钮即可开始调试Python程序。 需要注意的是,不同的Python版本可能需要不同的调试器,因此在配置launch.json文件时需要根据实际情况进行选择。另外,如果遇到问题可以查看VSCode调试文档或者在社区寻求帮助。 ### 回答2: VSCode是一款非常流行的轻量级编辑器,可作为Python开发的IDE使用。它提供了方便的调试和代码编辑功能,而这些都是可通过配置文件——launch.json来实现的。 launch.json是一个用于创建调试配置JSON格式文件,它描述了如何通过VSCode调试你的代码。以下是如何配置VSCode以进行Python调试。 首先,打开VSCode并选择要调试Python文件。然后,点击左侧边栏的调试图标(或按F5),这将创建并打开一个默认的launch.json文件。 在launch.json文件,在configurations属性下方添加一个调试配置项。在Python配置,必须指定Python解释器的路径。例如: ``` "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "pythonPath": "/usr/local/bin/python3.8", "console": "integratedTerminal" } ] ``` 上述代码,name属性是对这个调试配置的描述。type属性表示所创建的调试配置类型,这里选用的是Python。request表示调试的请求类型,在这里默认为launch,即启动程序进行调试。program是要运行的Python程序路径。pythonPath是Python解释器的路径,如果不指定,VSCode将尝试在环境变量查找。console设置为integratedTerminal,表示终端窗口与VSCode的窗口集成。 接下来是一些常用的可设置的属性: - "cwd":指定工作目录,即Python程序所在的目录。 - "env":设置环境变量。 - "args":设置命令行参数。 - "stopOnEntry":布尔值,表示调试器在程序运行后立即暂停。 - "debugOptions":设置更多的调试选项。 配置完毕后,保存launch.json文件并再次点击调试图标(或按F5)运行程序。程序将在VSCode启动并进入调试模式。 总而言之,通过配置launch.json文件,你可以定制你的VSCode至最适合你的Python调试需求,加速你的Python开发过程。 ### 回答3: VS Code 是一款功能强大的代码编辑器,支持多种编程语言,其 Python 是其一种。在 VS Code 进行 Python 开发时,我们需要配置一些参数,可以通过 vscodelaunch.json 进行配置。下面我将向大家介绍如何配置 VS Code 的 launch.json 来进行 Python 开发。 1.创建一个新的项目 首先,我们需要创建一个 Python 项目。可以通过在终端上进入项目所在目录,使用以下命令: ``` $ mkdir project_name $ cd project_name $ python -m venv env $ source env/bin/activate ``` 其,env 为虚拟环境名称,可以自定义。进入项目所在目录后,创建 launch.json 需要用到的虚拟环境。 2.创建 launch.json 文件 创建一个新的 launch.json 文件,该文件位于项目目录的 .vscode 文件。在 VS Code 编辑器,选择“调试”选项卡,点击“配置”按钮,选择“Python”运行环境,然后选择“创建 launch.json 文件”。 3.配置 launch.json 文件launch.json 文件,我们需要配置以下参数: a. type:指定调试类型,Python 调试使用的是 python。 b. request:指定调试的请求类型,可以是 launch 或 attach,Python 调试使用的是 launch。 c. name:调试的名称,可以自定义。 d. program:指定运行的 Python 文件路径,可以是绝对路径或相对路径。例如: ``` "program": "${workspaceFolder}/app.py" ``` e. pythonPath:指定使用的 Python 解释器路径,可以是无参数,相对路径或绝对路径。例如: ``` "pythonPath": "${workspaceFolder}/env/bin/python" ``` f. args:指定运行 Python 程序时传递的参数,可以是数组,例如: ``` "args": ["--arg1", "value1", "--arg2", "value2"] ``` g. env:指定环境变量,在 Python 程序使用 os.environ 可以获取到这里指定的环境变量。例如: ``` "env": {"env_key1": "env_value1", "env_key2": "env_value2"} ``` h. cwd:指定 Python 程序的工作目录。 i. stopOnEntry:指定是否在进入程序后暂停调试执行。 j. console:指定控制台类型,可以是终端类型或调试器内部类型。 k. python.consoleArgs:指定运行 Python 程序时传递给 Python 的命令行参数。 l. debugOptions:指定调试选项。 下面是一个完整的配置 launch.json 文件的例子: ``` { "version": "0.2.0", "configurations": [ { "name": "Python: Debug", "type": "python", "request": "launch", "program": "${workspaceFolder}/app.py", "pythonPath": "${workspaceFolder}/env/bin/python", "args": [], "env": {}, "cwd": "${workspaceFolder}", "stopOnEntry": false, "console": "integratedTerminal", "python.consoleArgs": [], "debugOptions": [ "RedirectOutput", "DebugStdLib", "BreakOnSystemExitZero" ] } ] } ``` 4.启动调试配置launch.json 文件后,可以在 VS Code 编辑器启动调试器。在调试器面板,点击“启动调试器”按钮,或按 F5 键。 总的来说,配置 VS Code 的 launch.json 来进行 Python 开发是很简单的一件事情。只需要在文件正确地设置参数,就可以轻松地调试 Python 程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值