VS Code调试Python项目:如何利用现有Shell脚本一键启动调试(含debugpy配置)

利用debugpy在VS Code中实现Shell脚本驱动的Python项目高效调试 本文详细介绍了如何利用debugpy在VS Code中实现Shell脚本驱动的Python项目高效调试。通过改造Shell脚本,使其通过debugpy启动并等待调试器连接,再配置VS Code的launch.json进行附加调试,开发者可以复用现有脚本的复杂环境配置,实现“一次配置,到处运行”,大幅提升调试效率,尤其适合机器学习、数据分析等复杂项目。 阅读详情

VS Code调试Python项目:如何利用现有Shell脚本一键启动调试(含debugpy配置)

调试,对于开发者而言,既是日常,也是艺术。尤其是在处理那些结构复杂、依赖繁多的Python项目时——比如一个典型的机器学习训练流程,启动命令里塞满了环境变量、配置文件路径、输出目录和各种实验参数。每次想调试一下,都得在VS Code的launch.json里小心翼翼地复刻一遍Shell脚本里的所有设置,稍有不慎,环境变量没传对,或者路径映射出错,调试会话就变成了“断点消失术”。这种重复劳动不仅低效,更消磨着开发者宝贵的专注力。

有没有一种方法,能让我们直接“借用”项目里现成的、经过验证的启动脚本,一键进入调试状态,而无需在VS Code里再做一次参数搬运工?答案是肯定的。本文将深入探讨如何利用debugpy这一利器,将你项目中已有的Shell启动脚本(如train.sh、serve.sh)无缝转化为调试入口。无论你是要调试团队内部的大型项目,还是想深入探究某个开源库的运行机制,这套方法都能让你摆脱繁琐配置,直击问题核心。我们的目标很简单:让调试的启动,像运行脚本一样简单。

1. 理解核心痛点:为何要绕开launch.json的重复配置?

在深入技术细节之前,我们有必要先厘清传统VS Code调试Python项目的工作流,以及它为何在复杂项目中显得笨拙。

当你打开一个Python项目,准备调试一个主入口为main.py的脚本时,VS Code的Python扩展通常会引导你创建一个launch.json文件。这个文件里,你需要定义program(程序路径)、args(命令行参数)、env(环境变量)等。对于一个简单的脚本,这没问题。但现实中的项目,尤其是涉及数据科学、后端服务或基础设施的,启动逻辑要复杂得多。

一个典型的深度学习训练脚本train.py,其启动命令可能封装在一个Shell脚本train.sh中:

#!/bin/bash
# train.sh
export CUDA_VISIBLE_DEVICES=0,1
export PYTHONPATH=/project/src:$PYTHONPATH
export MODEL_CONFIG=configs/experiment_a.yaml
export LOG_DIR=./logs/exp_001

python -m torch.distributed.launch --nproc_per_node=2 \
    train.py \
    --config $MODEL_CONFIG \
    --data.path /dataset/imagenet \
    --training.epochs 100 \
    --training.batch_size 128 \
    --output.dir $LOG_DIR \
    --seed 42

这个脚本做了几件关键事:

  1. 设置硬件环境:指定使用的GPU。
  2. 配置Python路径:确保模块导入正确。
  3. 注入运行时参数:通过环境变量传递配置路径。
  4. 组装复杂命令:包含分布式启动器torch.distributed.launch和一系列脚本参数。

现在,如果你想在VS Code中调试train.py,传统做法是尝试在launch.json里重现这一切:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: 训练调试",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/train.py",
            "args": [
                "--config", "configs/experiment_a.yaml",
                "--data.path", "/dataset/imagenet",
                "--training.epochs", "100",
                "--training.batch_size", "128",
                "--output.dir", "./logs/exp_001",
                "--seed", "42"
            ],
            "env": {
                "CUDA_VISIBLE_DEVICES": "0,1",
                "PYTHONPATH": "/project/src:${env:PYTHONPATH}",
                "MODEL_CONFIG": "configs/experiment_a.yaml"
            },
            // 如何优雅地处理 `torch.distributed.launch`?
        }
    ]
}

注意:你立刻会面临几个棘手问题。torch.distributed.launch这种包装器命令在launch模式下很难直接模拟;环境变量和参数列表存在重复定义(MODEL_CONFIG既在env里,又在args里);更糟糕的是,当脚本或参数更新时,你必须同步修改launch.json,否则调试环境将与实际运行环境产生差异,导致调试失效。

这种“配置双份”的模式不仅容易出错,也违背了DRY(Don‘t Repeat Yourself)原则。我们的解决方案思路是逆转它:不尝试在VS Code里模拟Shell脚本,而是让Shell脚本直接启动一个可被VS Code连接的调试服务器。这样,所有环境设置、参数传递的逻辑都保留在唯一可信的源头——Shell脚本中。

2. 搭建桥梁:debugpy的核心原理与工作模式

要实现上述思路,我们需要一个能在Python运行时内部接收调试器连接的组件。这就是微软官方推出的debugpy库。它不是一个独立的调试器,而是一个实现调试适配器协议的Python模块,允许像VS Code这样的IDE通过网络连接到正在运行的Python进程进行调试。

debugpy支持两种主要模式:

  1. “Launch”模式:由IDE(如VS Code)启动进程并注入debugpy。这仍然需要IDE知道如何启动进程。
  2. “Attach”模式:由应用程序自己启动并加载debugpy,然后等待IDE连接。这正是我们需要的模式。

在“Attach”模式下,工作流程如下图所示(概念性描述):

  1. 脚本侧:修改你的Shell脚本,在启动Python命令时,通过python -m debugpy来运行你的目标脚本。debugpy会启动一个调试服务器,监听指定端口,并暂停执行,等待调试器连接。
  2. IDE侧:在VS Code中配置一个attach类型的调试配置,指定连接的主机和端口。
  3. 连接:在Shell脚本启动并等待后,从VS Code启动调试会话。VS Code的调试器会连接到debugpy服务器,建立通信。连接成功后,debugpy会恢复目标脚本的执行,并在预设的断点处暂停。

这种模式的巨大优势在于,启动进程的完整上下文(环境变量、命令行参数、工作目录、进程关系)完全由原始Shell脚本决定。VS Code只作为一个“观察者”和“控制器”附加上去,无需关心进程是如何诞生的。

让我们看看debugpy作为模块运行时的核心参数:

参数说明是否必需
--listen指定调试服务器监听的地址和端口。格式为[host:]port,例如--listen 5678或--listen 0.0.0.0:5678。是
--wait-for-client指示debugpy在调试器连接之前暂停应用程序的执行。这是实现“附加”调试的关键。是(对于我们的场景)
--log-to指定debugpy自身日志的输出路径,用于排查连接问题。否
后续参数--之后的所有内容,都将作为参数传递给实际要运行的Python脚本或模块。-

一个最简单的使用示例是:python -m debugpy --listen 5678 --wait-for-client my_script.py arg1 arg2。这条命令会启动my_script.py,但在执行任何用户代码前,会先等待有调试器连接到本地的5678端口。

3. 实战改造:将你的Shell脚本变为调试入口

现在,我们进入实操环节。假设你有一个名为run_inference.sh的脚本,用于启动一个模型推理服务。

原始脚本 run_inference.sh:

#!/bin/bash
# 设置环境
export MODEL_REPO=/models/llama2
export HTTP_PORT=8080
export DEVICE=cuda

# 启动服务
python inference_server.py \
    --model-path $MODEL_REPO/consolidated.00.pth \
    --tokenizer-path $MODEL_REPO/tokenizer.model \
    --max-seq-len 2048 \
    --http-port $HTTP_PORT \
    --device $DEVICE

第一步:安装debugpy 在你的项目环境(虚拟环境或全局环境)中安装它。通常建议安装在项目依赖中。

pip install debugpy

第二步:修改Shell脚本,嵌入debugpy 我们不需要重写脚本逻辑,只需修改启动Python命令的那一行。

改造后的 run_inference.sh:

#!/bin/bash
# 设置环境
export MODEL_REPO=/models/llama2
export HTTP_PORT=8080
export DEVICE=cuda

# 定义调试端口
DEBUG_PORT=5888
# 定义debugpy日志路径(可选,便于排查问题)
DEBUG_LOG="./debug_log.txt"

# 启动服务 - 关键修改在这里
python -m debugpy --listen $DEBUG_PORT --wait-for-client --log-to $DEBUG_LOG \
    inference_server.py \
    --model-path $MODEL_REPO/consolidated.00.pth \
    --tokenizer-path $MODEL_REPO/tokenizer.model \
    --max-seq-len 2048 \
    --http-port $HTTP_PORT \
    --device $DEVICE

echo "服务启动,等待调试器连接在端口 $DEBUG_PORT ..."

关键改动解析:

  • 我们将直接调用python inference_server.py ...改为了python -m debugpy ... inference_server.py ...。
  • --listen $DEBUG_PORT:指定调试服务器端口。你可以固定一个端口(如5888),或者通过环境变量动态设置。
  • --wait-for-client:确保脚本在调试器连接前不会执行核心逻辑。
  • --log-to $DEBUG_LOG:这是一个好习惯。如果连接出现问题,查看这个日志文件能快速定位是网络问题、端口冲突还是debugpy自身异常。
  • 原有参数原封不动地跟在后面:所有--model-path、--http-port等参数都保持不变,完全由Shell脚本控制。

提示:对于更复杂的启动命令,例如通过torchrun或mpirun启动的分布式训练,原理相同。你需要确保debugpy被加载到每个子进程中(这通常意味着将-m debugpy作为Python解释器参数的一部分传递给分布式启动器),或者至少附加到rank 0进程上进行调试。具体命令会稍有不同,但核心思想不变:让启动命令自己去处理环境,然后挂上debugpy的“钩子”。

现在,当你运行bash run_inference.sh时,终端会挂起,显示类似“Waiting for debugger attach...”的信息。你的应用程序已经就绪,正静候调试器的光临。

4. 配置VS Code:连接至等待中的进程

脚本侧准备就绪后,我们需要在VS Code中配置调试器,让它知道去哪里连接。

在项目根目录下的.vscode/launch.json文件中,添加一个新的调试配置。如果文件不存在,可以通过VS Code的调试视图(侧边栏的虫子图标)点击“创建一个launch.json文件”来生成。

以下是一个针对上述示例的配置:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "附加到推理服务 (端口 5888)",
            "type": "python",
            "request": "attach",
            "connect": {
                "host": "localhost",
                "port": 5888
            },
            "pathMappings": [
                {
                    "localRoot": "${workspaceFolder}",
                    "remoteRoot": "."
                }
            ],
            "justMyCode": false
        }
    ]
}

配置项详解:

  • name: 在VS Code调试下拉列表中显示的名称,清晰易懂即可。
  • type: 固定为"python"。
  • request: 必须是"attach",表示我们要附加到一个已存在的调试服务器。
  • connect: 连接配置对象。
    • host: 调试服务器运行的主机。如果脚本在本机运行,就是localhost。如果在远程服务器(如开发机、云主机)上运行,则需要填写该服务器的IP地址,并确保防火墙开放了对应端口。
    • port: 必须与Shell脚本中--listen指定的端口完全一致(本例中是5888)。
  • pathMappings: 这是附加调试中最关键也最容易出错的配置之一。它建立了你本地VS Code工作区中的文件路径与远程(即运行脚本的机器)文件路径之间的映射关系。
    • localRoot: 你本地项目在VS Code中打开的文件夹路径。${workspaceFolder}是VS Code变量,代表当前工作区根目录。
    • remoteRoot: 脚本在远程机器上运行时,其工作目录(cwd)对应的路径。在上面的脚本中,我们没有使用绝对路径指定脚本位置,假设是在项目目录下执行的bash run_inference.sh,那么远程的工作目录就是项目目录本身。如果远程路径是绝对路径(如/home/user/project),这里也需要填写对应的绝对路径。

    重要:如果pathMappings配置不正确,VS Code将无法将本地设置的断点匹配到远程正在执行的文件上,导致断点“未绑定”(显示为灰色空心圆)。如果你发现断点不生效,首先检查这里的映射关系。一个简单的调试方法是:在Shell脚本中python -m debugpy命令之前加一行pwd,打印出远程工作目录,然后确保remoteRoot指向这个目录。

  • justMyCode: 设置为false,这样调试器可以深入第三方库或框架内部(如PyTorch、TensorFlow),如果你想了解底层调用栈的话。设置为true则只调试你自己写的代码。

现在,开始一次完整的调试会话:

  1. 启动脚本:在终端中,进入项目目录,运行bash run_inference.sh。终端会暂停,等待连接。
  2. 设置断点:在VS Code中,打开你想要调试的文件(例如inference_server.py),在代码行号左侧点击设置断点(红色圆点)。
  3. 启动附加调试:
    • 切换到VS Code的调试视图(侧边栏虫子图标)。
    • 在顶部的调试配置下拉菜单中,选择你刚刚创建的配置,例如“附加到推理服务 (端口 5888)”。
    • 点击绿色的“开始调试”按钮(或按F5)。
  4. 观察与交互:如果一切配置正确,VS Code的状态栏会变成橙色,表示已连接到调试器。此时,终端里被挂起的脚本会开始执行,并在你设置的第一个断点处暂停。你可以使用调试控制台(单步执行、继续、查看变量等)进行交互式调试。

5. 处理复杂场景与进阶技巧

掌握了基础流程后,我们来看看一些更复杂但常见的场景及其处理技巧。

5.1 调试在Docker容器内运行的应用

许多项目使用Docker进行环境封装。你依然可以使用debugpy进行附加调试。

方法:将debugpy端口暴露给宿主机。

  1. 修改Dockerfile或启动命令:确保容器内安装了debugpy (pip install debugpy)。
  2. 修改容器内的启动命令:和修改普通Shell脚本一样,在启动Python应用时加上-m debugpy --listen 0.0.0.0:5888 --wait-for-client。注意监听地址必须是0.0.0.0,以便接受来自容器外部的连接。
  3. 运行容器时映射端口:
    docker run -p 5888:5888 -v $(pwd):/app your_image bash /app/your_script.sh
    
  4. VS Code配置:launch.json中的connect.host填写localhost,port填写5888。pathMappings需要将localRoot映射到容器内的路径(例如,如果项目被挂载到容器的/app,则remoteRoot应为/app)。

5.2 调试需要复杂初始化的脚本(如需要用户输入)

有些脚本在启动后需要立即进行一些交互式操作(例如输入密码、选择配置)。--wait-for-client会阻塞所有执行,包括这些初始化步骤。

解决方案:在代码中手动导入并启动debugpy。

你可以不修改Shell脚本的启动命令,而是在Python代码的合适位置(例如,在完成必要初始化之后,在主逻辑开始之前)插入以下代码:

# 在你的主脚本文件(如 train.py)开头附近添加
import debugpy

# 确保只在需要时启动调试服务器
DEBUG_PORT = 5888
if os.environ.get("ENABLE_DEBUGPY", "0") == "1":
    debugpy.listen(("0.0.0.0", DEBUG_PORT))
    print(f"Debugger is waiting for attach on port {DEBUG_PORT}...")
    debugpy.wait_for_client() # 这行会阻塞,直到调试器连接
    print("Debugger attached, starting main logic...")

# ... 你原有的初始化代码(如读取配置、建立连接)...
# ... 然后是你的主业务逻辑 ...

然后,你的Shell脚本保持不变,只需在需要调试时设置环境变量ENABLE_DEBUGPY=1:

export ENABLE_DEBUGPY=1
bash train.sh

这种方法提供了更大的灵活性,可以精确控制调试器在代码的哪个阶段开始等待连接。

5.3 使用VS Code的“Compound”配置管理多进程调试

有些应用由多个进程组成(例如,一个Web服务器和一个后台工作进程)。你可以为每个进程准备一个带debugpy的启动脚本,并监听不同的端口(如5888, 5889)。

然后在VS Code的launch.json中,可以创建一个compounds配置来同时附加到这两个(或多个)进程:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "附加到 Web 服务",
            "type": "python",
            "request": "attach",
            "connect": {"host": "localhost", "port": 5888},
            "pathMappings": [...],
            "justMyCode": false
        },
        {
            "name": "附加到 Worker 进程",
            "type": "python",
            "request": "attach",
            "connect": {"host": "localhost", "port": 5889},
            "pathMappings": [...],
            "justMyCode": false
        }
    ],
    "compounds": [
        {
            "name": "调试所有服务",
            "configurations": ["附加到 Web 服务", "附加到 Worker 进程"],
            "stopAll": true
        }
    ]
}

这样,你可以一键启动一个调试会话,同时调试两个相互关联的进程,方便地观察进程间的交互和数据流。

6. 常见问题排查与效能提升

即使按照步骤操作,偶尔也会遇到连接失败或断点不生效的问题。这里有一个快速排查清单:

问题1:VS Code无法连接,提示“无法连接到运行时进程”。

  • 检查端口:确保Shell脚本中--listen的端口与launch.json中connect.port一致。
  • 检查主机:如果脚本运行在远程机器,connect.host必须是该机器的IP,且确保从你的本地机器可以ping通该IP。
  • 检查防火墙:确保远程机器的防火墙允许该端口的入站连接(对于本地localhost,通常没问题)。
  • 检查脚本状态:运行脚本后,使用netstat -an | grep 5888(Linux/Mac)或Get-NetTCPConnection -LocalPort 5888(Windows PowerShell)查看端口是否处于LISTEN状态。
  • 查看debugpy日志:检查Shell脚本中--log-to指定的日志文件,看是否有错误信息。

问题2:连接成功,但断点不生效(显示为灰色空心圆)。

  • 几乎肯定是pathMappings问题。确认localRoot是你VS Code打开的确切文件夹。确认remoteRoot是脚本执行时的工作目录。一个实用的调试方法是,在Python脚本最开始处添加几行打印:
    import os, sys
    print(f"Current working directory: {os.getcwd()}")
    print(f"File __file__: {__file__}")
    print(f"File absolute path: {os.path.abspath(__file__)}")
    
    运行脚本(在调试器连接前,这些打印会执行),在终端输出中查看实际路径,据此调整pathMappings中的remoteRoot。

问题3:调试过程中变量查看不全或报错。

  • 尝试在launch.json配置中增加"showReturnValue": true,以便在单步执行时显示函数返回值。
  • 对于大型数据结构(如NumPy数组、PyTorch张量),VS Code的变量面板可能渲染较慢或不全。可以尝试在调试控制台中使用print()或pprint()直接输出你关心的部分数据。

效能提升建议:

  • 创建调试脚本模板:为你常用的项目类型(如PyTorch训练、FastAPI服务)创建标准的debug_*.sh脚本模板,里面已经嵌入了debugpy命令和常用环境变量。新项目直接复制修改即可。
  • 利用VS Code任务:你可以创建一个VS Code任务(.vscode/tasks.json)来一键运行你的调试启动脚本,并与调试配置关联,实现“一键启动调试”。
  • 保存多个launch配置:如果你经常需要附加到不同的服务或使用不同的端口,可以在launch.json中保存多个attach配置,通过name区分,方便快速切换。

这套基于debugpy和Shell脚本的调试方法,其精髓在于尊重并利用现有的项目基础设施。它承认Shell脚本作为项目启动单一事实来源的地位,而不是试图在IDE中重新发明一套配置逻辑。对于维护大型项目、快速切入陌生代码库、或是搭建团队共享的调试标准,这都是一种极其高效且可靠的实践。下次当你面对一个带着复杂启动参数的项目时,不必再头疼地翻阅launch.json文档,试试直接给它的启动命令套上debugpy的“鞍具”,你会发现,驾驭这匹代码的骏马,从未如此得心应手。

在vs code中基于shell脚本的python代码调试 另外:使用vscode的workspace工作区,可以在该工作区下开发多个python工程,这些工程共享一个launch.json文件,此时把pathMappings中的remoteRoot设置为workspace路径。这样设置后,调试其他所有工程的时候,都不需要修改launch.json配置文件,只需要调整每个工程里的shell脚本启动命令即可。直接正常运行启动脚本即可,启动后,项目并没有实际运行,而是挂起后等待调试(wait-for-client)以上配置,相当于起了一个端口为888的服务。 阅读详情

相关推荐

VS Code调试Python项目新姿势:直接复用Shell脚本启动参数(含debugpy配置详解)

本文介绍了一种在VS Code中调试Python项目的高效新方法,即通过debugpy直接复用Shell脚本的启动参数。该方法摒弃了手动同步launch.json的繁琐步骤,采用Attach模式将调试器附着到由脚本启动的进程上,完美保留了原有的环境变量和命令行参数,特别适合AI模型训练、开源项目贡献等多参数复杂场景。

garlic的博客 656

Visual Studio Code基础:使用debugpy调试python程序

相关阅读VS codehttps://blog.csdn.net/weixin_45791458/category_12658212.html?spm=1001.2014.3001.5482 在VS code中可以很轻松地调试Python程序,首先需要安装Python调试器插件,如图1所示。图1 安装调试器插件 Python Debugger是用于VS code的调试扩展,通过debugpy提供强大的调试功能,如设置断点、单步执行和变量检查,支持脚本、Web 应用、远程进程和多线

保持终身学习的能力,温故而知新 3万+

VS Code Python环境配置:解释器、虚拟环境与调试器诊断指南

Python开发环境配置本质是解释器路径、虚拟环境隔离与调试协议协同的问题。VS Code不直接运行代码,而是通过Python扩展调度本地解释器,其核心在于确保终端命令行、VS Code状态栏显示、调试器加载三者指向同一Python实例。关键原理包括PATH路径解析优先级、venv的pyvenv.cfg机制、debugpy远程调试协议及sys.path模块搜索路径一致性。技术价值在于避免ModuleNotFoundError、断点失效、跨平台路径错位等高频故障;典型应用场景涵盖数据科学(conda环境)、W

weixin_30745553的博客 1233

VS Code Python 调试完全指南:从入门到精通

本文提供了Python调试的全面指南,涵盖从基础到高级的各种场景。主要内容包括:快速启动调试的基本步骤;基础调试功能如控制面板操作和视图区域使用;高级配置如launch.json设置和常用模板;主流框架(Django/Flask/测试框架)的调试方法;远程调试配置;实用技巧如条件断点、性能分析和多进程调试;常见问题解决方案;以及调试最佳实践和高效工作流。文章还介绍了异步代码、Jupyter Notebook和容器内调试等高级场景,并提供了快捷键速查表,帮助开发者快速掌握Python调试的各项技能。

Chase Blog 1041

VS Code Python远程调试核心原理与排错指南

Python远程调试本质是将本地IDE的调试能力通过DAP协议完整投射至远程执行环境,其技术基础在于debugpy作为标准调试后端与VS Code前端的跨网络协同。理解调试器启动模式(Attach/Launch)、路径映射(pathMappings)和SSH隧道保活机制,是实现断点命中、变量可读、调用栈准确的前提。该能力广泛应用于Kubernetes服务调试、容器化开发、金融级后台运维等需在生产近似环境中精准定位问题的工程场景,本文聚焦环境一致性、协议可达性与权限穿透性三大刚性约束,系统拆解debugpy部

weixin_30634661的博客 428

Rasa运行时调试实战:VS Code精准调试Custom Action

Rasa作为主流开源对话机器人框架,其核心挑战在于运行时状态不可见——slot值丢失、intent置信度异常、custom action不触发等问题频发。根本原因在于传统日志和交互式工具无法提供实时、可中断、可求值的执行上下文。本文聚焦Rasa调试的本质:将Action Server解耦为独立Python服务,利用VS Code Python debugger原生支持async/await、断点、变量监视与表达式求值的能力,实现对tracker状态、HTTP异步调用及slot生命周期的全程可观测。该方案兼容

cuikuangru5755的博客 449

告别手动配置!VS Code+Shell脚本调试Python的终极偷懒方案

本文介绍了一种高效调试Python代码的方案,通过VS Code结合Shell脚本实现零配置复用,特别适合需要处理多项目、多参数环境的开发者。使用debugpy工具,可以摆脱传统launch.json配置的束缚,提升调试效率,适用于机器学习、微服务等复杂场景。

Apple的专栏 714

Windows+VS Code远程开发Ubuntu Python项目实战

Python远程开发是指在本地编辑器中编写代码,而实际运行、调试与依赖管理均发生在远程Linux服务器上,其核心原理基于SSH协议建立安全通道,并通过IDE插件实现文件系统与进程环境的透明映射。该模式显著提升开发-生产环境一致性,规避‘本地能跑、服务器报错’等协作痛点,技术价值在于解耦开发体验与计算资源,兼顾Windows用户习惯与Ubuntu服务器稳定性。典型应用场景包括工业数据采集、边缘AI推理、API微服务迭代等需复用现有服务器软硬件栈的工程实践。本文聚焦VS Code Remote-SSH与venv

weixin_34198881的博客 315

VScode遇到python程序是通过sh文件启动的,如何调试

vscode 调试 sh文件启动 python

Defiler_Lee的博客 7697

如何通过shell脚本来debug python代码

如果想在python代码中设置断点进行跟踪的话,一个比较笨的办法是先得到shell脚本里面的运行结果,然后作为python代码运行的参数。然后在python代码设置好断点后,点击F5启动debug,这时会运行launch.json来响应本地机器的debug 端口需求,最终启动debug,并停在断点处。这种方法需要先把shell运行结果dump出来,再一个个填写在.vscode里面的launch.json中,当shell内容变化了,那么json也要跟着变化。注意,env环境变量设置要根据自己应用修改;

ltshan139的专栏 813

VS Code DAP协议驱动的AI调试智能体实现

调试智能体(Debugging Agent)是一种基于程序运行时状态进行自主诊断与修复的AI工程范式,其核心原理在于将大语言模型与调试器协议(如DAP)深度耦合,使AI不仅能理解代码语义,更能实时感知变量值、调用栈、作用域等动态上下文,并通过工具调用(evaluate、setBreakpoints等)执行‘假设-验证’闭环。相比传统Copilot补全式辅助,它具备目标拆解、多步推理和可执行决策能力,显著提升中高级开发者在复杂异步、状态管理、跨层嵌套等场景下的调试效率。本文聚焦VS Code生态下基于DAP

weixin_30756499的博客 388

OpenClaw Python 调试技能实战:pdb、breakpoint()、崩溃后现场分析与 debugpy 远程附加全指南

本文是 OpenClaw 仓库内置技能 [skills/python-debugpy/SKILL.md](https://link.gitcode.com/i/c7916a4458132dab0ee0923c32b07a2a) 的深度技术解读。它面向所有需要在 Python 代码中做交互式调试的场景——隐藏的局部变量、令人困惑的状态变更、偶发失败的测试、子进程、长驻服务,以及远程/无头(headl

gitblog_00365的博客 871

VS Code Remote-SSH 原理与工程化配置指南

Remote-SSH 不是简单的远程终端连接,而是一种将 VS Code 编辑器运行时(含语言服务、调试器、扩展系统)完整迁移至远程服务器的分布式开发架构。其核心基于 SSH 协议构建高可靠通信隧道,依赖服务器端系统环境、密钥认证、进程隔离与文件系统兼容性等底层支撑。技术价值在于实现跨设备一致的本地化开发体验,尤其适用于 Python 和 C# 等需强环境耦合的工程场景。典型应用包括云服务器开发、GPU 计算集群编程、企业内网安全编码等。本文聚焦 vscode 连接 ssh 远程服务器 的真实落地难点,覆盖

weixin_34013044的博客 419

VS Code Python入门:错误可视化与调试工作流实战

Python开发环境配置是初学者最易卡壳的技术门槛,核心在于理解编辑器如何与Python解释器、语言服务器(LSP)及终端协同工作。VS Code凭借IntelliSense实时语法分析、集成终端环境继承、图形化断点调试等能力,将抽象的路径、环境变量、类型推断转化为可感知的视觉反馈。它不替代PyCharm的IDE深度,也不止于文本编辑,而是以轻量架构实现‘错误即教学’的交互逻辑——红色波浪线对应语法树解析,右下角Python版本号绑定解释器选择,调试控制台复现运行时上下文。这种设计特别适配零基础学习者建立工

weixin_30553777的博客 364

VS Code Python环境配置:从识别解释器到调试格式化全链路

Python开发环境本质是解释器、语言服务器与工具链的协同契约。VS Code作为智能编辑器壳,依赖Python扩展(ms-python.python)和Pylance提供语法分析、调试、补全等能力,其核心在于准确绑定解释器路径并确保debugpy、black、pylint等后端与之同环境。技术价值体现在开发一致性——避免‘终端能跑、VS Code报错’的典型割裂。广泛应用于爬虫脚本、数据分析、API对接等轻量工程场景。本文聚焦Windows/macOS/Linux下VS Code对Python解释器的发现

weixin_34199405的博客 304

CEH Practical 实战考试真题与答案

CEH Practical 是 EC-Council 推出的Certified Ethical Hacker(CEH)认证项目中的一项高级动手实践考试。它不同于传统的理论考试,侧重于在真实环境中检验考生的实操能力。

sgafdgdagd的博客 968

Python调试技巧与工具链全解析

调试是软件开发中不可或缺的环节,尤其在Python开发中更为关键。通过系统化的调试方法,开发者可以快速定位代码问题,提升开发效率。本文从Python内置调试器pdb入手,介绍了其基本指令和使用场景,如`l(ist)`查看代码、`n(ext)`单步执行等。随后探讨了现代IDE如VS Code的图形化调试功能,包括条件断点和日志点设置。针对远程调试需求,对比了debugpy、ptvsd等方案的优缺点。在高级技巧部分,重点讲解了异常捕获与日志集成、性能分析工具cProfile的使用,以及内存泄漏检测方法objgr

weixin_34384557的博客 338

NHANES更新数据后,权重计算方式也更新了

官网说明在此:如果你比我还懒,我下载了几个说明文件。2021年8月至2023年8月的总样本量与之前的2年周期相似。然而,。特别是,与之前包括过度抽样的周期相比,非西班牙裔白人的样本量较高,而非西班牙裔黑人的样本量较低。此外,60岁及以上人群的样本量较高,而年轻群体的样本量较低。子组的估计值可能具有较低的精确度,因此,检测组间差异的统计能力可能较低。此外,年龄和种族/西班牙裔亚组(尤其是儿童和青少年年龄组)的估计值可能会显示意想不到的模式。

珏世佳人的博客 2410

VS Code Python解释器配置本质:环境控制权详解

Python解释器在开发工具中并非简单的可执行文件路径,而是代表一个完整运行时环境的上下文快照,涵盖语言版本、依赖包隔离、调试行为与语法分析规则。其核心原理在于解释器绑定虚拟环境(如venv或Conda),而环境又决定了sys.path、site-packages加载范围及第三方工具链(如Pylint、Black)的可用性。这一机制赋予开发者对代码执行确定性的掌控力,是保障跨团队、跨平台项目可复现的关键技术基础。典型应用场景包括数据科学项目依赖隔离、Web服务多环境切换、WSL跨系统开发以及CI/CD中的一

weixin_33845881的博客 461

大模型辅助意图识别,更懂你的客户洞察平台

通过大量的学习和训练,大模型不仅具备庞大的知识库,更掌握着丰富的语言模式和语义规则,能够精准地理解每一段对话的含义,为每一通对话进行全面、准确的标注。主要来自客户的行为信息,将客户与机构的重要时刻以时间轴的方式呈现出来,掌握客户生命周期的完整脉络,识别一些容易被忽略的重要营销MOT(Moment Of Truth,关键时刻研究)机会,提示理财经理跟进处理。将客户的历史交易数据和埋点系统采集的客户行为数据结合起来,辅以部分内容资讯的偏好探测,综合分析和预测客户在各个维度的喜好程度,实现千人千面的客户推送。

Dezhuzhineng的博客 2159

锂电池SOH预测 | 基于BP神经网络的锂电池SOH预测(附matlab完整源码)

锂电池SOH预测 | 基于BP神经网络的锂电池SOH预测(附matlab完整源码)

天天酷科研的博客 1114
上一篇: 超越/sdcard/Download:ADB文件推送的6个高阶路径方案(含/data/local/tmp实战)
下一篇: Qt6实战:从源码编译MySQL数据库驱动,打通数据库连接最后一公里
sql99
博客等级 码龄19年 168粉丝 1905原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值