需要对GitHub上的工程debug。
所以花时间看了下,参考了bili视频和chatgpt的解答。
chatgpt给的步骤
要在 VS Code 中调试 C++ 项目,可以按照以下步骤进行设置和操作:
-
确保已安装 C++ 扩展:在 VS Code 中选择 “Extensions”(或使用快捷键
Ctrl+Shift+X
),搜索并安装官方的 C++ 扩展。 -
在项目根目录下创建
.vscode
文件夹,并在其中创建一个名为launch.json
的文件。这是调试配置文件,用于配置调试会话的参数。 -
在
launch.json
文件中添加 C++ 的调试配置。可以使用上面提供的launch.json
模板,根据项目的具体情况进行修改。 -
配置调试环境和工具链:根据您的开发环境,可能需要配置调试器和编译器的路径。在
launch.json
文件中的相应字段中修改miDebuggerPath
和其他相关配置。 -
构建项目:在调试之前,需要确保项目已经成功编译。可以使用
tasks.json
文件创建一个编译任务,或者手动在终端中执行编译命令。 -
开始调试:在 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"
可以是true
或false
。
可以根据自己的需求进行修改和扩展任务配置。希望这些信息对您有所帮助!如果有任何进一步的问题,请随时提问。
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”)