VSCode 在运行c程序时, tasks.json 和 launch.json 的关系及配置详解

VSCode 中,tasks.jsonlaunch.json 之间存在密切的关系,特别是在编译和调试 C/C++ 项目时。它们各自的作用如下:

1. tasks.json 的作用:

  • tasks.json 用于定义 构建任务,比如如何编译项目中的源代码。这个文件描述了如何运行外部命令(如 gccg++)来编译程序,指定命令行参数、工作目录等。
  • 你可以在这个文件中配置多个任务,比如编译、打包、运行测试等任务。

示例任务 (tasks.json):

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "C/C++: g++ build active file",   // 任务标签
            "type": "shell",
            "command": "/usr/bin/g++",                // 使用 g++ 编译
            "args": [
                "-g",                                 // 生成调试信息
                "${file}",                            // 编译当前打开的文件
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group": {
                "kind": "build",                      // 表示该任务属于构建任务
                "isDefault": true
            },
            "problemMatcher": ["$gcc"],               // 用于捕捉编译错误和警告
            "detail": "编译 C/C++ 源文件"
        }
    ]
}

2. launch.json 的作用:

  • launch.json 用于定义 调试配置,即如何运行调试器来调试你的程序。
  • launch.json 指定了调试目标程序、调试工具(如 GDB 或 LLDB)、调试命令等。
  • 重要的是,launch.json 需要引用由 tasks.json 生成的可执行文件。因此,调试之前,通常需要通过 tasks.json 中定义的构建任务来编译程序。

示例配置 (launch.json):

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++: g++ build and debug active file",  // 调试配置名称
            "type": "cppdbg",                                  // 使用的调试器类型
            "request": "launch",                               // 这是一次调试启动请求
            "program": "${fileDirname}/${fileBasenameNoExtension}", // 可执行文件路径
            "args": [],                                        // 传递给程序的命令行参数
            "stopAtEntry": false,
            "cwd": "${fileDirname}",                           // 程序的工作目录
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",                                   // 使用 GDB 进行调试
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ build active file",    // 引用 `tasks.json` 中的任务
            "miDebuggerPath": "/usr/bin/gdb",
            "internalConsoleOptions": "openOnSessionStart"
        }
    ]
}

3. tasks.jsonlaunch.json 的关系:

  • preLaunchTasklaunch.json 中的 preLaunchTask 属性用来指定在调试之前需要执行的构建任务。这个属性的值就是 tasks.json 中定义的 label 值。

    • 例如,launch.json 中的 "preLaunchTask": "C/C++: g++ build active file" 会在调试开始之前自动执行 tasks.json 中对应的构建任务,即编译当前文件。
  • 工作流程

    1. 当你点击 调试 按钮(或按 F5)时,VSCode 会先检查 launch.json,并查看是否需要执行 preLaunchTask
    2. 如果 preLaunchTask 已配置,VSCode 会执行 tasks.json 中定义的构建任务来编译程序。
    3. 构建成功后,VSCode 会运行调试器,并根据 launch.json 中的配置调试生成的可执行文件。

4. 具体流程

  • 当你按 F5(启动调试)时:
    1. 编译launch.json 中的 preLaunchTask 会触发 tasks.json 中定义的构建任务,使用 gcc/g++ 等编译器编译源代码生成可执行文件。
    2. 调试:一旦构建成功,调试器(如 GDB)会按照 launch.json 的配置启动,并加载生成的可执行文件,进入调试模式。

5. 注意事项

  • 如果 tasks.json 中的构建任务失败,调试不会启动。
  • 如果没有在 launch.json 中配置 preLaunchTask,调试器会尝试直接运行可执行文件,但如果文件未编译成功,将会出错。

通过这种方式,tasks.jsonlaunch.json 在编译和调试过程中相互配合,确保代码能够被正确编译并进入调试流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值