vscode debug

本文详细介绍了如何在VSCode中使用C++项目进行调试,重点讲解了launch.json和tasks.json配置文件的作用、设置步骤以及它们之间的关联。涉及到的配置项包括调试器路径、任务执行、调试环境和编译任务的集成。
摘要由CSDN通过智能技术生成

需要对GitHub上的工程debug。

所以花时间看了下,参考了bili视频和chatgpt的解答。

chatgpt给的步骤

要在 VS Code 中调试 C++ 项目,可以按照以下步骤进行设置和操作:

  1. 确保已安装 C++ 扩展:在 VS Code 中选择 “Extensions”(或使用快捷键 Ctrl+Shift+X),搜索并安装官方的 C++ 扩展。

  2. 在项目根目录下创建 .vscode 文件夹,并在其中创建一个名为 launch.json 的文件。这是调试配置文件,用于配置调试会话的参数。

  3. launch.json 文件中添加 C++ 的调试配置。可以使用上面提供的 launch.json 模板,根据项目的具体情况进行修改。

  4. 配置调试环境和工具链:根据您的开发环境,可能需要配置调试器和编译器的路径。在 launch.json 文件中的相应字段中修改 miDebuggerPath 和其他相关配置。

  5. 构建项目:在调试之前,需要确保项目已经成功编译。可以使用 tasks.json 文件创建一个编译任务,或者手动在终端中执行编译命令。

  6. 开始调试:在 VS Code 中选择 “Run and Debug” 视图(或使用快捷键 Ctrl+Shift+D),然后选择调试配置(在 launch.json 文件中定义的配置名称)。点击运行按钮(绿色三角形)即可开始调试。

这些是在 VS Code 中调试 C++ 项目的基本步骤。您可以根据需要进行自定义和调整。希望这些信息对您有所帮助!如果有任何进一步的问题,请随时提问。

主要涉及两个json文件: launch.json ,tasks.json。

tasks.json 和 launch.json 是两个不同的配置文件,用于配置不同方面的工作环境。

  • tasks.json:tasks.json 是用于配置任务(tasks)的文件。它定义了在 VS Code 中执行的任务,例如编译代码、运行测试和自动化构建等。通过定义任务,我们可以使用 VS Code 的任务运行器来执行这些任务。

  • launch.json:launch.json 是用于配置调试(debug)会话的文件。它定义了在 VS Code 中调试代码时需要的配置,包括调试器类型、调试器参数、运行环境等。通过定义调试配置,我们可以使用 VS Code 的调试功能来运行和调试我们的代码。

这两个配置文件的主要区别在于它们的用途和配置内容。tasks.json 用于配置任务的执行方式,而 launch.json 用于配置调试器的行为。它们分别独立地管理任务和调试的配置,并且可以在不同的工作空间或项目中使用不同的配置。

然而,这两个配置文件之间也存在关系。在某些情况下,我们可能希望在执行某个任务时启动调试器,或者在调试时自动执行某个任务。为了实现这种关联,我们可以在 tasks.json 和 launch.json 文件中进行相应的配置。

例如,我们可以在 tasks.json 中定义一个任务,在编译代码完成后自动启动调试器。然后,在 launch.json 中定义调试器的配置,以便在调试会话中使用任务生成的可执行文件。

这种关联可以根据具体的需求进行定制,以适应不同的开发场景。在配置文件中,我们可以使用相应的变量和占位符来引用其他配置文件中的值,实现它们之间的交互和共享。

总结起来,tasks.json 用于配置任务的执行方式,而 launch.json 用于配置调试器的行为。这两个配置文件可以相互独立,但也可以通过合适的配置实现关联,以满足不同的开发需求。

launch.json

下面是一个常见的 VS Code Debug 的 launch.json 模板,以及每个选项的简要介绍:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C++ Launch",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/program",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "gdb",
      "miDebuggerPath": "/path/to/gdb",
      "preLaunchTask": "build"
    }
  ]
}
  • "name": 调试配置的名称,可以自定义。

  • "type": 调试器的类型,对于 C++ 可以使用 "cppdbg"
    常见的 type 值包括:

      1. "node": 用于调试 Node.js 应用程序。
      2. "python": 用于调试 Python 应用程序。
      3. "cppdbg": 用于调试 C++ 应用程序,使用 Visual Studio 的调试器。
      4. "java": 用于调试 Java 应用程序,使用 Java Debugger (jdb)。
    
  • "request": 调试请求的类型,使用 "launch" 表示启动一个新的调试会话。

  • "program": 调试会话中要执行的程序的路径。${workspaceFolder} 是一个变量,表示当前工作区的根目录。替换为您实际的程序路径。

  • "args": 调试程序时传递给它的命令行参数,可以在数组中指定。

  • "stopAtEntry": 是否在程序入口处停止调试,默认为 false,表示不停止。

  • "cwd": 设置当前工作目录(Current Working Directory)录,${workspaceFolder} 表示当前工作区的根目录。它定义了调试器在启动时所在的目录,影响了在调试过程中相对路径的解析和执行操作的基准。

如果不指定 “cwd” 属性,调试器将使用默认的工作目录,通常是项目根目录。

  • "environment": 设置环境变量,可以在数组中指定。

  • "externalConsole": 是否在外部终端中运行程序,默认为 false,表示在 VS Code 的终端中运行。

  • "MIMode": 调试器的模式,对于 GDB 可以使用 "gdb"
    1. “gdb”:使用 GDB 调试器接口模式。这是默认的调试器接口模式,适用于大多数 C/C++ 项目。
    2. “lldb”:使用 LLDB 调试器接口模式。这是适用于 macOS 平台的调试器接口模式。
    3. “windows-x86”:使用 Windows 平台上的 x86 调试器接口模式。
    4. “windows-amd64”:使用 Windows 平台上的 AMD64 调试器接口模式。
    5. “vscode”:使用 Visual Studio Code 的内置调试器接口模式。

  • "skipFiles" 是一个配置调试器跳过特定文件的属性。通过将文件路径添加到 “skipFiles” 数组中,可以指示调试器在执行调试过程时跳过这些文件,而不会在其中停下来。

  • "miDebuggerPath": GDB 可执行文件的路径,替换为您的 GDB 可执行文件路径。

  • "preLaunchTask": 在启动调试会话之前要运行的任务的名称,可以在 tasks.json 文件中定义。如果编译任务(如使用 make 命令编译程序)与调试会话相关,请将其指定在此处。
    在 launch.json 文件中,“preLaunchTask” 是一个可选的配置项,用于指定在启动调试会话之前需要执行的任务。

当你设置了 “preLaunchTask” 值时,VS Code 会在启动调试器之前自动执行指定的任务。这可以用于在调试会话开始之前准备环境,例如编译代码、启动服务、安装依赖等。

以下是一个示例的 launch.json 文件,演示了如何使用 “preLaunchTask” 配置项:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Debug Node.js",
      "program": "${workspaceFolder}/app.js",
      "preLaunchTask": "build"
    }
  ],
  "tasks": [
    {
      "label": "build",
      "command": "npm",
      "type": "shell",
      "args": ["run", "build"],
      "problemMatcher": []
    }
  ]
}

上述示例中,launch.json 文件中的 “preLaunchTask” 配置项的值为 “build”,它表示在启动调试之前将执行名为 “build” 的任务。而在 tasks.json 文件中,我们定义了一个名为 “build” 的任务,用于执行 npm 命令的 “run build”。
启动调试会话时,VS Code 会首先执行名为 “build” 的任务,它会执行 npm 命令来构建代码,然后才会启动调试器并开始调试代码。
总之,通过使用 “preLaunchTask” 配置项,你可以在启动调试会话之前自动执行一个任务,以便准备好调试所需的环境。这可以提高开发效率并简化调试过程。

这是一个基本的配置模板,您可以根据需要进行自定义。要使用这个配置,只需将其添加到 .vscode 文件夹下的 launch.json 文件中。

tasks.json

以下是一个示例的 .vscode/tasks.json 文件模板,其中包含了一些常见的任务配置选项:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Build",
      "type": "shell",
      "command": "g++",
      "args": [
        "-g",
        "${file}",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    },
    {
      "label": "Clean",
      "type": "shell",
      "command": "rm",
      "args": [
        "-rf",
        "${fileDirname}/*.exe",
        "${fileDirname}/*.o"
      ],
      "group": {
        "kind": "build",
        "isDefault": false
      }
    }
  ]
}

该模板包含了两个任务配置的示例:

  • “Build” 任务:用于编译当前文件(${file})到与源文件相同的目录中,并生成可执行文件(${fileDirname}/${fileBasenameNoExtension})。该任务被标记为默认构建任务(isDefault: true),可以通过按 Ctrl+Shift+B 快捷键触发。使用 g++ 编译器进行编译操作。

  • “Clean” 任务:用于清理编译生成的可执行文件和目标文件,即删除 ${fileDirname}/*.exe${fileDirname}/*.o。该任务不是默认构建任务(isDefault: false),可以在任务列表中选择运行。

以下是对任务配置选项的介绍:

  • "label":任务的显示名称,用于标识任务。

  • "type":任务类型,默认为 "shell",表示使用 shell 命令执行任务。

  • "command":要执行的命令。

  • "args":命令的参数数组。

  • "group":任务分组的配置,用于在用户界面上组织和显示任务。"kind" 可以是 "build""test""isDefault" 可以是 truefalse

可以根据自己的需求进行修改和扩展任务配置。希望这些信息对您有所帮助!如果有任何进一步的问题,请随时提问。

error汇总

  • lauch文件 报告jsonExpected comma json
    确保代码中,逗号(,)的使用是正确的。每个属性-值对之间都应该用逗号进行分隔,除了最后一个属性-值对。

  • vscode debug时:Module containing this breakpoint has not yet loaded or the breakpoint adress could not be obtained.
    debug版本,要在makefile中增加-g选项:CFLAGS += -g
    若是cmakelist,增加如下定义:add_definitions(“-Wall -g”)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值