如何在vscode中debug python代码,包括如何优雅地传入多个参数

news2024/11/26 10:40:50

Visiul Studio Code, 简称vscode,是一款轻量级代码编辑器,其丰富的扩展程序使得其可以方便地作为任何语言的编辑器。

本文将讲述如何在vscode中对python脚本文件进行debug。

本文主要包括debug的两种方式:

  • 基本debugging(basic debugging):可以解决大部分情况
  • 命令行debugging(command line debugging): 用于需要传参数繁多或者远程调试的程序

如难以理解或出现错误欢迎指正

0 要求

在vscode扩展(extension)在这里插入图片描述
中先安装Python扩展

在这里插入图片描述

Python扩展提供了python的语法,运行,环境选择等支持,是vscode写python代码的一个好助手。

安装完Python扩展后,打开python脚本文件则会在右下角(低版本可能在左下角)出现环境设置以选择你想用的python解释器在这里插入图片描述
而右上角则会出现运行和debug的选项。

1 基本debugging

  • 如果你只是想简单地debug程序,没有其他需求,可以直接打断点,然后右上角点击debug,程序会自动地debug当前打开的python文件。
    在这里插入图片描述

  • 如果你想定制化一些debug选项,则按照以下步骤进行:

    1. 侧边栏选择运行和调试在这里插入图片描述

    2. 如果你已有dubug配置文件,则跳3. 否则请先创建一个launch.json文件在这里插入图片描述
      并选择配置文件为python文件在这里插入图片描述

    3. 此时你的工作目录下会多一个目录.vscode和该目录下一个launch.json文件,该文件则配置了你的debug配置。在运行和调试侧边栏中点击绿色三角则启动debug程序在这里插入图片描述

2 debug配置文件

vscode依靠.vscode目录下的launch.json来管理你的debugger程序,下面是一个该文件的实例:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "justMyCode": true
        }
    ]
}

其中"configurations"中的一个实例则为一个debugger程序配置,当想增加多个debugger程序时(如你可能需要两组不同的参数分别来debug,而不想每次都修改),则可以在"configurations"新加一个配置文件,如下所示:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: Current File",
      "type": "python",
      "request": "launch",
      "program": "${file}",
      "console": "integratedTerminal",
      "justMyCode": true
    },
    {
      "name": "the second debugger",
      "type": "python",
      "request": "launch",
      "program": "${file}",
      "console": "integratedTerminal",
      "justMyCode": true
    }
  ]
}

下面将说明每个debugger配置中键值的含义:

name

name是该debugger的名字,会显示在运行和调试侧边栏中的下拉框中,比如上面的配置文件则会有以下的下拉框:

在这里插入图片描述

选择对应的debugger,并点击绿色三角则可以启动对应的debugger。

type

设置使用什么的debugger,设为python,无需修改。

request

调试模式,可选:

  • launch: 在program指定的文件上启动debugger
  • attach: 将debugger附到(注入到)一个正在运行的python进程上。用以远程debugger,也可以用来解决多参数问题,具体请参考后面的部分。

program

提供具体想要debugger去运行的python脚本文件,可以是相对路径也可以是绝对路径,比如上面配置文件中的${file}代表当前vscode激活的文件(即当前打开的,而且输入光标所在的文件),也可以指定某特定文件,如设置

"program": "${workspaceFolder}/main.py"

则代表在工作目录下的main.py上启动debugger。

module

指定需要debug的module,等价于命令行中-m参数,具体可参考Python.org,一般无需关心。

python

指定需要的解释器路径,如果没有指定则默认为当前工作空间选择的解释器(即在你打开python文件时,右下角指定的python解释器)

pythonArgs

数组类型

需要传给解释器(不是python脚本)的参数,通过数组给出,如下所示"pythonArgs": ["<arg 1>", "<arg 2>",...].

args

数组类型

传给python脚本的参数(请与上面的pythonArgs进行区分),通过数组给出,如下所示"args": ["--quiet", "--norepeat", "--port", "1593"]

注意:每个参数必须为单独一项,不得出现"--port 1593"的情形,如果参数过多,可以参考下面命令行debugging的方式。

stopOnEntry

布尔类型

当设为true,则会自动在被debug的程序上第一行代码停止,忽略或者设为false则在第一个断点停止。

console

如果不指定redirectOutput的情况下,程序的输出会输出到哪里

输出位置
"internalConsole"vscode的debug输出控制台
"integratedTerminal" (default)vscode的集成终端
"externalTerminal"分离的一个输出窗口

autoReload

当修改了代码后,是否自动重启debug程序,启动方式如下:

{
  "autoReload": {
    "enable": true
  }
}

subProcess

是否开启子程序debug,默认false

cwd

设置debugger工作目录,如果不指定则默认为vscode的工作目录,会影响你代码中相对路径。

redirectOutput

是否重定向输出到调试控制窗,即下图该窗口中:

在这里插入图片描述

justMyCode

忽略或者设为true则只会在用户写的代码停留,设为false则会debug标准库。

3 命令行debugging

命令行debugging用以远程debug,或者debug正在运行中的程序,我一般用来解决传参过多问题。

当需要给脚本文件传参,而参数过多时,需要一个一个给配置文件中的args添加,非常麻烦,所以可以选择直接运行程序,再进行debug捕捉的方式。

首先在配置文件中加入下面的配置实例:

{
  "name": "Python: Attach",
  "type": "python",
  "request": "attach",
  "connect": {
    "host": "localhost",
    "port": 5678
  }
}

其次在当前环境中安装debugpy,如pip install debugpy.

通过下面的语法运行想要debug的文件(提前打断点):

python -m debugpy --listen 5678 --wait-for-client ./myscript.py

然后在运行和调试侧边栏中的下拉框中选择相应的debugger并启动,则会自动捕捉该程序并进行debug,如下所示:

在这里插入图片描述

该方法在对remote-ssh连接的远程服务器代码进行debug时,不需要指定服务器域名和ip,当作本地即可。

技巧

下图给出了一些我常用的debug功能,仅供参考

在这里插入图片描述

参考文献

vscode官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/753666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

咖啡店小程序怎么做

咖啡店小程序功能介绍 咖啡店小程序是一款专为咖啡店打造的移动应用程序&#xff0c;旨在提供更便利、高效的服务体验。以下是该小程序的主要功能介绍&#xff1a; 1. 菜单浏览&#xff1a;用户可以通过小程序浏览咖啡店提供的各种咖啡、茶和小吃菜单&#xff0c;包括详细的产…

Docker基础——Centos7安装Docker

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…

速通sklearn库

速通sklearn库 前言 ​ 最近在复习之前学习过的知识点&#xff0c;因此想到把学过的总结一下&#xff0c;方便后面再次复习&#xff0c;所以有了这个系列。 说明 ​ 由于标题写的是“速通”&#xff0c;因此我的想法是可以让大家看完这篇文章&#xff0c;可以上手matplotlib库&…

FCPX插件-复古老电影胶片边框幻灯片照片展示介绍动画 Emotion Slides

Emotion Slides是一款fcpx插件&#xff0c;可以制作复古老电影胶片边框幻灯片照片展示介绍动画&#xff0c;完全自定义任意数量的场景&#xff0c;完全定制的控制器&#xff0c;7个独特的场景准备&#xff0c;易使用简单&#xff0c;只需拖放。 Emotion Slides插件的主要功能包…

【网络编程】传输层协议——UDP协议

文章目录 一、传输层的意义二、端口号2.1 五元组标识一个通信2.2 端口号范围划分2.3 知名端口号2.4 绑定端口号数目问题2.5 pidof & netstat命令 三、UDP协议3.1 UDP协议格式3.2 如何理解报头&#xff1f;3.3 UDP协议的特点3.4 UDP缓冲区3.5 UDP传输最大长度 一、传输层的意…

基于linux下的高并发服务器开发(第一章)- GDB调试(1)1.13

掌握一个清屏快捷键&#xff1a;CTRLL 01 / 什么是GDB 02 / 准备工作 03 / GDB 命令 -- 启动、退出、查看代码 在~/Linux/lesson08目录下有test.c文件 #include <stdio.h> #include <stdlib.h>int test(int a);int main(int argc,char* argv[]){int a,b;printf(&…

React懒加载/动态加载(Suspense +lazy())简单实例

页面嵌套 两种页面嵌套的方式&#xff0c;一种是父子组件&#xff0c;一种是懒加载1、父子组件&#xff08;可略&#xff0c;只用来做例子对比&#xff09;2、使用懒加载 两种页面嵌套的方式&#xff0c;一种是父子组件&#xff0c;一种是懒加载 1、原本需要用父子组件来实现页…

计算机网络 day7 扫描IP脚本 - 路由器 - ping某网址的过程

目录 network 和 NetworkManager关系&#xff1a; 实验&#xff1a;编写一个扫描脚本&#xff0c;知道本局域网里哪些ip在使用&#xff0c;哪些没有使用&#xff1f; 使用的ip对应的mac地址都要显示出来 计算机程序执行的两种不同方式&#xff1a; shell语言编写扫描脚本 思…

selenium WebDriver 中的几种等待--sleep(),implicitly_wait(),WebDriverWait()

目录 强制等待:sleep() 隐式等待:implicitly_wait() 显示等待:WebDriverWait() 与until()或者until_not()方法结合使用 WebDriverWait与expected_conditions结合使用 显示等待,自定义等待条件 强制等待:sleep() import time sleep(5) #等待5秒 设置固定休眠时间&#x…

【JAVA】与数字相关的类,Number Math 类

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言数据类型Number类介绍数据格式化实例 Math类介绍静态常量实例 前言 为了解决对数字、日期和系统设置进行处理的困难&#xff0c;如&#xff1a;一些数字&数学问题、随机…

【iOS】—— 编译链接

【iOS】—— 编译链接 文章目录 【iOS】—— 编译链接编译流程预处理&#xff08;预编译Prepressing&#xff09;编译&#xff08;Compilation&#xff09;汇编&#xff08;Assembly&#xff09;链接&#xff08;Linking&#xff09; 编译流程 编译流程分为四步 预处理&#…

基于mediapipe的手势识别

安装opencv:pip install opencv-python 安装mediapipe:pip install mediapipe draw_utils.py: import cv2 import numpy as npdef draw_line(img, width, height, hand, start_index, stop_index):for i in range(start_index, stop_index):x1, y1 = int(hand.landma…

Unity 多相机 同屏显示

一 首先了解&#xff1a; 相机和Canvas 的渲染先后关系 什么是相机的渲染顺序&#xff1f; 答&#xff1a;简单理解就是 用毛刷 刷墙面&#xff0c;先刷的&#xff0c;会被后刷的 挡住 。 列如&#xff1a;相机01&#xff1a; 先渲染的大海&#xff0c;相机02&#xff1a;后…

爬虫之Scrapy

一 介绍 Scrapy一个开源和协作的框架&#xff0c;其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的&#xff0c;使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛&#xff0c;可用于如数据挖掘、监测和自动化测试等领域&#x…

jquery实现甘特图时效管理

一、效果图 二、html文件 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html lang"en"><head><script src"../../../baoBiaoHtml/js/jquery-1.9.0.js"></script><script src"../..…

【GitOps系列】自动化构建Image

文章目录 使用 GitHub Action 构建镜像使用 GitLab CI 构建镜像使用 Tekton 构建镜像Tekton组件安装Tekton 简介创建 Tekton Pipeline创建 Task创建 Pipeline创建 EventListener创建 TriggerTemplate创建 Service Account 和 PVC设置 Secret 创建 GitHub Webhook触发 Pipeline …

markdown2html 转化流程

定义一个extensions function markedMention() {return {extensions: [{name: mention,level: inline,start(src) {// console.log("markedMention start....", src);return src.indexOf(#)},tokenizer(src, tokens) {const rule /^(#[a-zA-Z0-9])\s?/const match…

巴斯夫与长三角物理研究中心开展合作,专注固态和钠离子电池领域

“巴斯夫&#xff0c;全球知名化学公司&#xff0c;宣布与长三角物理研究中心合作&#xff0c;在江苏溧阳市成立联合研究中心&#xff0c;专注于固态电池和钠离子电池的科研。” 根据巴斯夫官方微博消息&#xff0c;新成立的研究中心名为“巴斯夫–长三角物理研究中心新能源汽车…

RAID6故障导致分区打不开的服务器数据恢复案例

服务器数据恢复环境&#xff1a; 一台infortrend存储&#xff0c;有一组由12块硬盘组建的RAID6&#xff0c;RAID6的所有空间划分给一个LUN并映射到WINDOWS系统上&#xff0c;WINDOWS系统上划分了一个GPT分区。 服务器故障&分析&#xff1a; 存储无法访问&#xff0c;经过检…

TIOBE统计数据

TIOBE统计数据&#xff08;2023年7月&#xff09; TIOBE Index编程社区指数是编程语言流行度的一个指标。评级基于全球熟练工程师的数量、课程和第三方供应商的数量。Google、Bing、Yahoo!、维基百科、亚马逊、YouTube 和百度等流行搜索引擎用于计算评级。 七月头条&#xff1…