VSCode中的launch.json

2025-3-7|2025-3-7
FollyCoolly
FollyCoolly
type
status
date
slug
summary
tags
category
icon
password

launch.json是什么

launch.json是 VS Code 中用于配置调试环境的一个文件,定义了如何启动和配置调试器。
通过编辑该文件,可以定制化调试的行为,例如设置启动参数、环境变量、工作目录等。
For simple applications, VS Code tries to run and debug the currently active file. For more complex applications or debugging scenarios, you need to create a launch.json file to specify the debugger configuration. 
launch.json file is used to configure the debugger in Visual Studio Code.
Visual Studio Code generates a launch.json (under a .vscode folder in your project) with almost all of the required information.
The generated file contains two sections, one that configures debugging for launch and a second that configures debugging for attach.

Launch 调试和 Attach 调试

Launch 调试(启动调试)

  • 定义:当使用“launch”模式进行调试时,调试器会启动一个新的程序实例,并立即开始调试该实例。
  • 适用场景:适用于那些可以直接从IDE(如VS Code)中启动的应用程序,特别是当你有权限直接运行目标程序的时候。
  • 配置:需要在launch.json文件中配置program字段来指定要启动的可执行文件路径,以及其他可能需要的设置,比如参数、工作目录等。
  • 特点
    • 控制台选项(如externalConsole)在这种模式下有效,可以决定是否为调试会话打开外部控制台。
    • 可以更方便地设置断点、查看变量值等,因为是从程序的起点开始执行。

Attach 调试(附加调试)

  • 定义:当使用“attach”模式时,调试器连接到一个已经运行的进程,而不是启动一个新的进程。这种方式允许您对正在运行的应用程序进行实时调试。
  • 适用场景:适用于无法直接从IDE启动的应用程序,或者是那些已经在运行的服务和后台进程。也常用于调试生产环境中的问题。
  • 配置:需要知道目标进程的ID或名称,并在launch.json中相应地配置这些信息。通常不需要配置program字段,而是配置processId或类似字段来指定要附加的目标。
  • 特点
    • 不会启动新的进程,因此与启动调试相比,它不能影响被调试程序的启动参数或环境。
    • 对于某些情况下的调试特别有用,例如调试长时间运行的服务或者分析特定时间段内的应用行为。

主要区别

  • 启动新进程 vs. 连接到现有进程:Launch模式启动一个新的程序实例,而Attach模式则连接到一个已存在的进程。
  • 控制权:使用Launch模式时,调试器拥有对程序生命周期的完全控制;而在Attach模式下,调试器只能观察和干预已经运行的进程。
  • 应用场景:Launch适合开发阶段的调试,Attach更适合于服务端程序或已部署应用的维护和故障排查。

launch.json 的结构和基本原理

launch.json 文件的整体结构通常由一个 JSON 对象组成,该对象内包含一个名为 configurations 的字段,用于配置不同的调试会话。configurations 是一个数组,每个数组元素代表一个调试配置项。
以下是一个简单的 launch.json 文件示例,其中包含两个不同的调试配置:

如何创建和配置 launch.json 文件

  1. 打开项目文件夹或项目文件。
  1. 打开 VS Code,点击左侧的调试图标(一个虫子的图标),或者使用快捷键 Ctrl+Shift+D(Windows/Linux)或 Cmd+Shift+D(Mac)。
  1. 在调试面板的顶部,将看到一个齿轮图标,这是调试配置的设置图标。点击这个图标,然后选择 "Add Configuration..."。
  1. 在弹出的菜单中,将看到不同的调试配置选项,比如 "Node.js"、"Python" 等。选择与正在调试的编程语言相对应的配置选项。如果没有直接适用的选项,可以选择 "Add Configuration..." 添加一个自定义配置。
  1. 根据选择的配置选项,VS Code 将自动为生成一个基本的配置模板,并在编辑器中打开 launch.json 文件。
  1. launch.json 文件中,可以修改或添加各个字段来定制调试配置。字段的具体含义和用法可以根据选择的配置选项来进行设置。
  1. 保存 launch.json 文件后,可以在调试面板的顶部下拉菜单中选择刚刚配置的调试配置。
  1. 点击绿色的“运行”按钮开始调试。如果选择的是默认配置,还可以使用快捷键 F5 启动调试。

常见字段

不同的调试器支持不同的配置参数。在 VS Code 中,可以通过在 launch.json 文件中的 configurations 数组中添加具体的调试配置来设置这些参数。在配置调试会话时,可以根据具体的调试目标、语言和框架,选择适合的配置参数,从而实现更精细的调试控制。
一下是一些通用的、常见的配置:

version

指定 launch.json 文件的格式版本。通常使用 "0.2.0"

configurations

一个包含多个调试配置的数组。每个配置是一个 JSON 对象。

name

调试配置的名称,用于在 VS Code 菜单中显示。

type

指定调试器的类型,如 "node""python""go" 等。

request

指定调试请求类型,通常为 "launch"(启动调试)或 "attach"(附加到已运行的进程)。

program

指定调试器将启动或附加到的可执行文件的完整路径。调试器需要这个位置来加载调试符号。

default

可以通过设置 "default" 属性为 true 来指定一个默认的调试配置。当按下 F5 启动调试时,会自动使用默认配置。

args

启动程序时要传递给程序的命令行参数的JSON数组。示例:["arg1", "arg2"]。如果您需要转义字符,则需要双倍转义它们。例如,["{\\\"arg1\\\": true}"] 将会向您的应用程序发送 {"arg1": true}

cwd

设置由调试器启动的应用程序的工作目录。

environment

添加到程序运行环境中的环境变量。示例:[ { "name": "config", "value": "Debug" } ],而不是 [ { "config": "Debug" } ]。请注意,正确的格式是使用"name"和"value"键来指定环境变量的名字和值。

其他字段

stopOnEntry

设置为 true 时,在启动后会在入口处停止,等待调试器连接。

preLaunchTask

指定在启动调试前运行的任务,通常是一个编译任务。

postDebugTask

指定在调试结束后运行的任务,比如清理任务。

outFiles

设置输出文件的路径,用于映射源代码和编译后的文件。

sourceMaps

控制是否启用源代码映射,可以是 inlinebothfalse

sourceMapPathOverrides

用于根据源代码映射调整文件路径。

stopOnError

设置为 true 时,当发生错误时暂停调试。

smartStep

设置为 true 时,跳过无需调试的代码。

skipFiles

指定不需要调试的文件或文件夹。

justMyCode

设置为 true 时,只调试自己的代码。

调试器和 launch.json 的关系

调试器是一种工具,用于执行和监视正在运行的程序,并在运行时提供调试信息。它们与特定编程语言和环境相关,可以捕获变量值、堆栈跟踪等信息,帮助开发人员诊断和修复代码中的问题。调试器可以是 VS Code 内置的,也可以是第三方扩展提供的。
launch.json 文件是配置文件,用于定义如何启动和配置调试器,以及调试器应该如何运行代码。每个调试器配置都对应于一种特定的调试场景,如 Node.js 调试、Python 调试等。在 launch.json 中,可以指定启动程序的路径、命令行参数、工作目录等信息,还可以设置断点、观察表达式等调试选项。

Go 相关配置

mode

launch 调试

可以是autodebugtestexecreplaycore中的一个。在auto模式下,扩展会根据当前活动的编辑器窗口选择debugtest
  • 允许值autodebugtestexecreplaycore
  • 默认值auto
这表明了调试会话的模式,例如auto模式将根据当前活跃的编辑器内容来决定是进入调试模式还是测试模式。

attach模式

指示本地调试还是远程调试。本地调试类似于使用dlv attach命令,而远程调试类似于使用dlv connect命令。
  • 允许值:"local","remote"
  • 默认值:"local"

debugAdapter

选择与此启动配置一起使用的调试适配器。
  • 允许值legacydlv-dap
  • 默认值dlv-dap

dlvFlags

dlv(Delve调试器)提供额外的标志。请注意,一些标志如--log-output--log--log-dest--api-version--output--backend已经在调试配置中有相应的属性,如果这些标志在dlvFlags中再次指定,可能会被忽略或导致错误。
这意味着,在配置dlvFlags时,应该避免重复设置那些已经在调试配置中通过其他属性指定的选项,以防止潜在的冲突或错误。相反,应专注于那些没有直接对应属性的自定义或高级选项。这样可以确保调试会话按照预期运行,并充分利用 Delve 调试器的功能。

Refer

LLVM 项目中的常见数据结构VS Code 安装和设置 Nerd Font
Loading...