为vvvv gamma C#节点项目设置调试——生成VS Code launch.json和tasks.json配置,将调试器附加到运行中的vvvv,配置Visual Studio Code调试环境
调试 vvvv γ C# 工程是一项面向实际任务的技能,主要用于对于 CLI 参数和会话文件, 请参见 vvvv 启动技巧;Context- Aware 设置工作流程;
使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
关于 CLI 参数和会话文件,请参阅 vvvv-startup 技能。
当用户要求设置调试环境时,请遵循以下工作流。必须在生成任何文件之前,一次性提出所有配置问题(使用 AskUserQuestion)。切勿假设默认值——所有选项均需明确向用户确认。
通过扫描 C:\Program Files\vvvv 目录下匹配 vvvv_gamma_* 的子目录,自动定位 vvvv.exe:
ls -d "/c/Program Files/vvvv/vvvv_gamma_"* 2>/dev/null | sort -r
目录命名格式为:vvvv_gamma_MAJOR.MINOR[-BUILD-gHASH-PLATFORM]。按版本号降序排列。默认过滤掉含 -beta、-alpha、-rc、-test、-dev 后缀的预发布版本,除非工作区中不存在稳定版。
检测工作区中已存在的内容:
.csproj / .sln 文件(可能需要或不需要构建任务 —— 见第 3 步).vl 文件(可作为 --open 参数的目标)help/ 目录(常见测试补丁存放位置).vscode/launch.json(应扩展而非覆盖)VL.StandardLibs —— 见下方关于包仓库的警告)*.vl 文件或 .csproj 中的 元素提取包名称(用于 --editable-packages)关键:必须在生成任何配置前,使用 AskUserQuestion 提出以下全部问题。 可将相关问题合并为多选题形式以提升效率。在收集完全部答案前,禁止生成 launch.json。
.vl 补丁? —— 列出所有发现的 .vl 文件供选择;若存在 help/ 目录,则优先建议其中的文件。--debug 标志? —— 启用后支持断点调试,但会降低补丁加载速度。提问:“是否启用 --debug 以支持断点?(启动变慢)”。默认:快速迭代时为否;用户明确需要断点时为是。--allowmultiple? —— 允许同时运行多个 vvvv 实例。提问:“是否允许多个 vvvv 实例?若选否,当已有 vvvv 运行时启动将失败(有助于发现残留进程)。” 默认:否。--package-repositories? —— 指定 vvvv 扫描包的文件夹路径。警告:若工作区包含 VL.StandardLibs/ 等 Git 子模块,使用 --package-repositories ${workspaceFolder} 将导致 vvvv 重新编译全部核心库源码,耗时数分钟。 提问:“是否添加 --package-repositories?仅当 vvvv 无法自动发现你的包时才需启用。警告:若你的仓库包含 VL.StandardLibs 或其他库子模块,此选项将触发完整重编译。” 默认:否。--editable-packages? —— 从源码加载指定包。仅在启用 --package-repositories 时有意义。仅当用户已启用 --package-repositories 后再询问此项。.vl 文档是直接引用 .csproj(源码引用,最常见),还是引用预编译的 DLL?” 源码引用 = 不需要构建任务;DLL 引用 = 需添加 preLaunchTask: "build"。仅当所有问题均已回答完毕后,方可生成 .vscode/launch.json,并视情况生成 .vscode/tasks.json。
必须始终生成以下配置:
可选生成:
--debug,则额外生成一个启用该参数的配置(反之亦然)tasks.json最简配置 —— 仅打开补丁:
{
"version": "0.2.0",
"configurations": [
{
"name": "vvvv — MyPatch",
"type": "coreclr",
"request": "launch",
"program": "C:\Program Files\vvvv\vvvv_gamma_7.1-win-x64\vvvv.exe",
"args": [
"-o",
"${workspaceFolder}/help/HowTo Use MyFeature.vl"
],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"console": "internalConsole"
},
{
"name": "Attach to vvvv",
"type": "coreclr",
"request": "attach",
"processName": "vvvv.exe"
}
]
}
当用户启用所有参数时:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug with vvvv",
"type": "coreclr",
"request": "launch",
"program": "C:\Program Files\vvvv\vvvv_gamma_7.0-win-x64\vvvv.exe",
"args": [
"--package-repositories",
"${workspaceFolder}",
"--editable-packages",
"VL.MyPackage*",
"-o",
"${workspaceFolder}/help/HowTo Use MyFeature.vl",
"--debug",
"--allowmultiple"
],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"console": "internalConsole"
},
{
"name": "Attach to vvvv",
"type": "coreclr",
"request": "attach",
"processName": "vvvv.exe"
}
]
}
在启动 vvvv 前添加 preLaunchTask 构建 C# 项目:
{
"name": "Debug with vvvv (pre-build)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "C:\Program Files\vvvv\vvvv_gamma_7.0-win-x64\vvvv.exe",
"args": [
"-o",
"${workspaceFolder}/help/HowTo Use MyFeature.vl",
"--debug"
],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"console": "internalConsole"
}
关键要点:
preLaunchTask —— vvvv 通过 Roslyn 在运行时处理 C# 编译preLaunchTask: "build"--debug 启用调试符号(断点必需,但会降低补丁加载速度)--package-repositories 告知 vvvv 包的查找路径 —— 警告:将重新编译扫描目录树中发现的所有 VL 库子模块--editable-packages 从源码加载指定包(支持通配符模式)-o 在启动时打开指定的 .vl 补丁--allowmultiple 允许启动第二个 vvvv 实例 —— 省略该参数可用于检测残留实例当 vvvv 已运行且你希望在不重启的情况下调试时使用:
{
"name": "Attach to vvvv",
"type": "coreclr",
"request": "attach",
"processName": "vvvv.exe"
}
仅当项目需要外部构建(如 DLL 引用、原生依赖、Release 构建)时才生成 tasks.json。对于 vvvv 在运行时编译 C# 的源码项目引用,完全跳过此步骤。
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": ["build", "${workspaceFolder}/src/MyProject.csproj", "-c", "Debug"],
"problemMatcher": "$msCompile",
"group": { "kind": "build", "isDefault": true }
},
{
"label": "build-release",
"command": "dotnet",
"type": "process",
"args": ["build", "${workspaceFolder}/src/MyProject.csproj", "-c", "Release"],
"problemMatcher": "$msCompile"
}
]
}
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "& 'C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe' '${workspaceFolder}/src/MyProject.sln' -p:Configuration=Debug -p:Platform=x64 -t:Rebuild -v:minimal",
"options": {
"shell": { "executable": "powershell.exe", "args": ["-Command"] }
},
"problemMatcher": "$msCompile",
"group": { "kind": "build", "isDefault": true }
}
]
}
除非项目依赖 MSBuild 特有功能或需针对平台目标构建的 .sln,否则优先使用 dotnet build。
.csprojvvvv.exe 的路径-o YourPatch.vl(如需断点,请添加 --debug)--debug)vvvv.exe{
"profiles": {
"Debug vvvv": {
"commandName": "Executable",
"executablePath": "C:\Program Files\vvvv\vvvv_gamma_6.8-win-x64\vvvv.exe",
"commandLineArgs": "-o YourPatch.vl",
"workingDirectory": "$(ProjectDir)"
}
}
}
--debug —— 强制生成调试符号以确保断点可靠生效,但会带来性能开销。建议仅在 Debug 配置中启用;性能测试或部署验证时请禁用。--stoppedonstartup —— 启动时暂停执行,便于在首次调用 Update() 前设置断点--nocache —— 若断点无法绑定,可强制从源码重新编译Debugger.Break() —— 在 C# 代码中插入该调用,可编程触发断点console: "internalConsole" —— 将 Console.WriteLine 输出捕获至 VS Code 调试控制台--package-repositories + VL.StandardLibs 子模块 —— 若工作区包含 VL.StandardLibs/ Git 子模块(vvvv 贡献仓库中常见),--package-repositories ${workspaceFolder} 将导致 vvvv 发现并从源码重编译全部标准库,耗时数分钟,且几乎从非所需行为。建议:省略 --package-repositories,或将其指向不含库子模块的特定子目录。--allowmultiple 掩盖残留实例 —— 若未启用该标志,vvvv 在检测到其他实例运行时将拒绝启动。这是有益的设计:可及时发现残留进程。启用 --allowmultiple 后,可能意外运行两个实例并占用双倍资源。--debug 显著拖慢整体性能 —— 调试符号生成会显著降低 vvvv 的实时编译速度。仅在真正需要断点时启用;对于 UI 快速验证或行为检查等场景,请禁用以提升迭代效率。相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章