VS Code 调试中的 launch.json 文件

launch.json 是 VS Code 用于配置调试环境的文件,位于项目根目录的 .vscode 文件夹中。它定义了如何启动和调试程序。

核心配置字段

  • type: 调试器类型,如 "node"(Node.js)、"python"(Python)等。
  • request: 调试请求类型,常用 "launch"(启动新程序)或 "attach"(附加到已运行程序)。
  • name: 调试配置的名称,显示在调试下拉菜单中。
  • program(或 "file"):指定入口文件路径,如 "${workspaceFolder}/app.js"。
  • args: 传递给程序的命令行参数数组。
  • env: 环境变量键值对,如 {"NODE_ENV": "development"}。

示例(Node.js)

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "启动 Node 程序",
      "program": "${workspaceFolder}/app.js",
      "args": ["--port=3000"],
      "env": {
        "DEBUG": "true"
      }
    }
  ]
}


VS Code 调试中的 tasks.json 文件

tasks.json 用于定义自动化任务(如构建、测试),通常与 launch.json 配合使用。例如,调试前需编译代码时,可通过任务预先执行编译。

核心配置字段

  • label: 任务名称,需唯一。
  • type: 任务类型,如 "shell"(命令行任务)或 "process"。
  • command: 执行的命令(如 "npm"、"gcc")。
  • args: 命令参数,如 ["run", "build"]。
  • group: 任务分组,常用 "build" 或 "test"。
  • isBackground: 是否为后台任务(需配合 "problemMatcher")。

示例(TypeScript 编译任务)

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "tsc 编译",
      "type": "shell",
      "command": "tsc",
      "args": ["-p", "tsconfig.json"],
      "group": "build",
      "problemMatcher": ["$tsc"]
    }
  ]
}


launch.json 与 tasks.json 的协作

通过 "preLaunchTask" 字段,可在调试前自动运行指定任务。例如:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "调试 TypeScript",
      "program": "${workspaceFolder}/dist/app.js",
      "preLaunchTask": "tsc 编译"
    }
  ]
}

此时调试会先执行 tasks.json 中标签为 "tsc 编译" 的任务,再启动调试。


注意事项

  1. 路径变量:
    • ${workspaceFolder}:项目根目录。
    • ${file}:当前打开的文件。
  2. 调试扩展:确保安装对应语言的调试扩展(如 ms-vscode.js-debug)。
  3. 问题排查:若任务未触发,检查 label 是否匹配 preLaunchTask,或通过 Terminal > Run Task 手动测试任务。

 例子:

{

    "version": "0.2.0",

    "configurations": [

        {

            // 配置名称,VSCode 调试面板显示的名字

            "name": "(gdb) Bash on Windows Launch",

            // 调试类型,C++ 调试器

            "type": "cppdbg",

            // 启动方式

            "request": "launch",

            // 要调试的可执行文件路径(WSL 路径)

            "program": "/mnt/d/study/pa/work/cart_pole/Cart-Pole-main2-class/cart_pole.exe",

            // 传递给程序的命令行参数

            "args": [],

            // 是否在程序入口处暂停

            "stopAtEntry": true,

            // 传递给 gdb 的额外参数(一般为空)

            "miDebuggerArgs": "",

            // 调试时的工作目录(WSL 路径)

            "cwd": "/mnt/d/study/pa/work/cart_pole/Cart-Pole-main2-class/",

            // 环境变量设置

            "environment": [],

            // 是否使用外部终端

            "externalConsole": false,

            // 源文件路径映射(WSL 路径 <-> Windows 路径)

            "sourceFileMap": {

                "/mnt/d/study/pa/work/cart_pole/Cart-Pole-main2-class": "D:\\study\\pa\\work\\cart_pole\\Cart-Pole-main2-class"

            },

            // pipeTransport 用于在 Windows 下通过 bash 调用 gdb

            "pipeTransport": {

                // gdb 路径(WSL 内)

                "debuggerPath": "/usr/bin/gdb",

                // 用于调用 bash 的 Windows 路径

                "pipeProgram": "${env:windir}\\system32\\bash.exe",

                // 传递给 bash 的参数

                "pipeArgs": [

                    "-c"

                ],

                // bash 的工作目录

                "pipeCwd": ""

            },

            // 调试器启动时执行的命令

            "setupCommands": [

                {

                    // 启用 gdb 的漂亮打印

                    "description": "Enable pretty-printing for gdb",

                    "text": "-enable-pretty-printing",

                    "ignoreFailures": true

                },

                {

                    // 设置反汇编风格为 Intel

                    "description": "将反汇编风格设置为 Intel",

                    "text": "-gdb-set disassembly-flavor intel",

                    "ignoreFailures": true

                },

                {

                    // 跳过 std 命名空间下的标准库函数

                    "description": "防止 gdb 打开标准库函数",

                    "text": "-interpreter-exec console \"skip -rfu std::.*\"",

                    "ignoreFailures": false

                }

            ],

            // 符号加载设置

            "symbolLoadInfo": {

                "loadAll": false,

                "exceptionList": ""

            },

        },

    ]

}

只需要修改对应路径名称就行。其他不用改,也不需要task.jsion文件

更多推荐