VSCODE(八)launch 调试与运行

本文介绍了如何在Visual Studio Code(VSCODE)中配置和使用launch.json进行调试。内容涵盖Python、Lua和C++的调试配置,以及调试过程中的基本操作,包括断点设置和调试工具栏的使用。通过F5快捷键可以实现一键调试,而复杂的场景则需要自定义launch.json文件。调试器插件在不同语言中的应用和调试配置选项也得到了详细阐述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面讲了如何配置任务文件tasks.json,调试功能在程序程序经常会用上,那么VSCODE是完成调试功能的呢?答:.vscode文件夹内的launch.json文件配置,一些调试器插件支持通过F5一键调试当前文件,对于一些复杂的调试场景,我们可能需要进行定制化操作。

一、调试和运行菜单

单击顶部run选项,可以显示所有调试和运行的所有选项:
点击创建一个launch.json文件,大多数调试和运行相关的选项和功能可以在run子菜单找到。
在这里插入图片描述除了Node.js外其他语言调试都需要在应用市场安装额外的调试器扩展。要切换到运行视图,选择在活动栏点击运行图标或快捷键Ctrl+Shift+D,在运行视图中展示了一切与运行和调试相关,顶部还有调试命令和配置栏。
在这里插入图片描述

二、如何编写launch.json

在VSCODE中,一些调试器插件支持通过F5进行一键调试当前文件,对于一些复杂的调试场景,需要自行创建调试文件。无论哪一种情况,首先确保你要调试的目标语言是否已经在应用市场下载对应调试插件,插件可能还提供调试器(gdb之类的)。下面以一些常见的程序语言进行说明:

2.1 Python调试配置

无论哪一种语言,为了获取更好的编码体验,都需要在应用市场找相应的插件,如Python的这个插件:
1可以看出,这插件支持了智能提示、语法检查和调试等丰富功能。一些调试插件支持一键调试当前文件,是否支持直接按下F5即可:
在这里插入图片描述
可以看出插件已经具备多种调试配置,选择一个适合自己场景的配置即可,这里我选择了Python File(Debug the currently active Python file)。
2非常简单!

2.2 Lua调试配置

同样的,插件市场找到了Lua的插件:
3
弹出配置选择:
在这里插入图片描述
找到lua相关的调试环境,LuaHelper:Debug。按下F5后并不能一键调试,插件提示:
4
按下ctrl+shift+d 唤起调试窗口,选择add Configuration:
在这里插入图片描述
在弹出的环境选择LuaHelper:Debug:
5
其launch.json变成了:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "LuaHelper-Debug",
            "request": "launch",
            "name": "LuaHelper-Attach",
            "description": "通用模式,通常调试项目请选择此模式",
            "cwd": "${workspaceFolder}",
            "luaFileExtension": "",
            "connectionPort": 8818,
            "stopOnEntry": true,
            "useCHook": true,
            "autoPathMode": true
        },
        {
            "type": "LuaHelper-Debug",
            "request": "launch",
            "name": "LuaHelper-DebugFile",
            "description": "独立文件调试模式",
            "luaPath": "",
            "packagePath": [],
            "luaFileExtension": "",
            "connectionPort": 8818,
            "stopOnEntry": true,
            "useCHook": true
        }
    ]
}

简单来看,这个插件帮我们自动增加了两个配置,分别是LuaHelper-Attach和LuaHelper:

在UI上选择LuaHelper-DebugFile配置:
在这里插入图片描述
这时候配置已经完成,点击F5即可进行调试操作。

2.3 C++调试配置

和前面两个脚本语言不同,C++需要先进行编译后并添加调试信息才能进行调试,插件所做的事情需要执行额外的编译任务,不过完全不用担心,对于简单的C++工程,插件会帮你安排好一切,你只需要下载对应的插件即可:
在这里插入图片描述
直接按下F5,提示选择环境:
在这里插入图片描述
选择C++(GDB/LLDB):
在这里插入图片描述感觉果然是个官方插件吗?他会引导你选择默认配置,选择对应的编译器配置即可,这里我选择了g++ -Build and debug active file
在这里插入图片描述
插件帮你写了以下launch.json文件内容:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ build active file",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

同时还帮你写了编译任务文件tasks.json,两个文件相互配合完成 编译-调试任务。launch.json需要注意的"preLauchTask: “C/C++: g++ build active file”",与tasks.json的“label”选择是相互对应的,也就是在launch之前需要执行编译。

三、调试操作

3.1 调试操作

一旦调试会话开启,调试工具栏将会出现在编辑器的顶部。在这里插入图片描述
从左往右依次是:

  • continue(F5)
  • Step Over(F10),遇到子函数不进去执行
  • Step Into(F11),遇到子函数进去执行
  • Step Out(Shift+F11),跳出子函数剩余部分
  • Restart(Ctrl+Shift +F5)
  • Stop(Shift +F5)

Tip: 可以通过设置debug.toolBarLocation来控制调试工具栏的位置。它可以是悬浮、停靠在运行视图或者隐藏。运行模式:只运行不调试

3.2 断点

你可以通过点击数字左边空白区域或者使用F9快捷键添加一个断点。可以在“运行”视图的“ BREAKPOINTS”部分中进行更精细的断点控制(启用/禁用/重新应用)。

  • 断点在编辑器空白区域将会以实心红点表示
  • 禁用的断电将会是灰色空心圆
  • 当调试会话开启,无法在调试器中注册的断点将变为灰色空心圆。 如果在运行没有实时编辑支持的调试会话时编辑源,则可能会发生同样的情况。

在这里插入图片描述
高级的调试技巧,请参考:https://code.visualstudio.com/Docs/editor/debugging

### 配置 VSCode 的 `launch.json` 文件 在 Visual Studio Code 中,为了实现对 C++ 或其他编程语言的支持并完成调试功能,通常需要手动配置 `launch.json` 和 `tasks.json` 文件。以下是关于如何配置这些文件的具体说明。 #### 创建和编辑 `launch.json` 1. **打开调试视图** 在左侧活动栏中点击“调试图标”,或者按下快捷键 `Ctrl+Shift+D` 打开调试面板。 2. **初始化调试配置** 如果尚未存在 `.vscode/launch.json` 文件,则可以通过点击顶部提示中的“创建一个 launch.json 文件”选项来生成默认模板[^1]。 3. **填写必要的字段** 下面是一个典型的用于 C++ 调试的 `launch.json` 示例: ```json { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/a.out", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "build" } ] } ``` 上述代码片段解释如下: - `"name"` 定义了该配置项的名字,在启动调试时会显示出来。 - `"type"` 表明使用的调试器类型,这里为 `cppdbg` 即支持 C/C++ 的调试工具链。 - `"request"` 设置请求模式,“launch”表示运行新程序;而“attach”则连接到已存在的进程上。 - `"program"` 是要执行的目标可执行文件路径,一般通过 `${workspaceFolder}` 变量指向工作区根目录下的编译产物位置[^2]。 - `"args"` 参数列表传递给目标应用程序作为输入参数。 - `"stopAtEntry"` 控制是否暂停于入口函数处,默认不启用此行为。 - `"cwd"` 当前的工作目录设定,推荐采用`${fileDirname}`动态获取源码所在文件夹地址。 - `"environment"` 自定义环境变量数组,目前为空白状态无需特别处理。 - `"externalConsole"` 是否开启外部终端窗口来进行交互操作。 - `"MIMode"` 指定 MI(Machine Interface)协议版本号对应的调试引擎名称——此处选用 GNU Debugger (`gdb`)。 - `"miDebuggerPath"` 明确指定了 GDB 实际安装的位置字符串形式表达式。 - `"setupCommands"` 提供一组额外指令发送至调试服务器端之前被执行,比如激活美化打印等功能特性。 - `"preLaunchTask"` 关联的任务名用来指示先期构建动作发生顺序关系。 #### 编写关联任务 `tasks.json` 由于上面提到过设置了预启动任务名为 “build”, 因此还需要同步建立相应的 `tasks.json`, 如下所示: ```json { "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "g++", "args": ["-g","${relativeFile}","-o","${fileBasenameNoExtension}.out"], "group": { "kind": "build", "isDefault": true }, "problemMatcher": ["$gcc"] } ] } ``` 这段 JSON 数据描述了一个简单的 shell 类型的任务对象结构体: - `"label"` 字段赋予这个特定任务唯一的标识符标签值 —— 此处命名为 'build'. - `"type"` 属性表明它属于哪种类型的作业类别之一 ('process', 'shell') ,在这里选择的是后者. - `"command"` 命令行语句指定实际待执行的操作命令串 ,即 g++ 编译器本身 . - `"args"` 数组列出了附加给 command 的各个独立参数单元 .其中包含了调试信息标志 `-g` 以及利用相对路径定位当前正在编辑的那个单独 cpp 文件 ${relativeFile}, 同时还规定输出结果保存成同名字去掉扩展部分加上 '.out' 后缀的新二进制格式文档. - `"group"` 组织分类属性进一步细化分组归属情况,并将其标记为主建造过程的一部分以便后续自动触发机制发挥作用. 最后,"problemMatcher" 键链接到了内置 GCC 工具链错误解析匹配规则集 "$gcc". 这样就完成了整个流程的设计架构搭建.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值