配置C/C++调试

Alaunch.json文件用于在Visual Studio Code中配置调试器

Visual Studio Code 生成launch.json(在a.vscode你项目中的文件夹)几乎包含了所有必要的信息。要开始调试,你需要填写以下内容节目字段,显示你计划调试的可执行文件路径。这必须在启动和连接(如果你计划在任何点连接到运行实例)配置中都指定。

生成的文件包含两个部分,一个配置启动调试,另一个配置附件调试。

配置 VS Code 的调试行为

设置或更改以下选项以控制 VS Code 在调试过程中的行为:

项目(必修)

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

symbolSearchPath

它告诉Visual Studio Windows调试器需要搜索符号(.pdb)文件的路径。用分号分隔多条路径。例如:“C:\\符号;C:\\SymbolDir2”.

必须精确来源

一个可选的标志,指示 Visual Studio Windows 调试器要求当前源代码与 pdb 匹配。

附加SOLibSearchPath(额外SOLibSearchPath)

告诉GDB或LLDB要搜索哪些路径来查找.so文件。用分号分隔多条路径。例如:“/用户/用户/dir1;/用户/用户/dir2”.

外部控制台

仅在启动调试程序时使用。对于附着,该参数不改变调试器的行为。

  • Windows:设置为 true,会生成一个外部控制台。设置为false时,将使用VS Code的integratedTerminal。
  • Linux:当设置为 true 时,它会通知 VS Code 生成一个外部控制台。设置为false时,将使用VS Code的integratedTerminal。
  • macOS:设置为true时,会通过以下方式生成一个外部控制台LLDB-MI.当设置为 false 时,输出可以在 VS Code 的 debugConsole 中看到。由于内部的限制LLDB-MI, 不支持integratedTerminal。

avoidWindowsConsoleRedirection

为了支持 Windows 上的 gdb 的 VS Code 集成终端,该扩展在调试器的参数中添加了控制台重定向命令,使控制台输入和输出显示在集成终端中。将此选项设置为确实如此会禁用它。

伐木

可选的标志用于确定应记录哪些类型的消息应记录到调试控制台。

  • 例外:可选标志,用于判断异常消息是否应记录到调试控制台。默认为真。
  • moduleLoad:可选标志,用于判断模块加载事件是否应记录到调试控制台。默认为真。
  • programOutput:可选标志,用于判断程序输出是否应记录到调试控制台。默认为真。
  • engineLogging:可选标志,用于判断诊断引擎日志是否应记录到调试控制台。默认为false。
  • trace:可选标志,用于判断诊断适配器命令追踪是否应记录到调试控制台。默认为false。
  • traceResponse:可选标志,用于判断诊断适配器的命令和响应追踪是否应记录到调试控制台。默认为false。

visualizerFile

.natvis用于调试的文件。关于如何创建Natvis文件的信息,请参见创建本地对象的自定义视图

showDisplayString

visualizerFile指定为,showDisplayString将启用显示字符串。开启该选项可能会导致调试时性能变慢。

示例:

{
  "name": "C++ Launch (Windows)",
  "type": "cppvsdbg",
  "request": "launch",
  "program": "C:\\app1\\Debug\\app1.exe",
  "symbolSearchPath": "C:\\Symbols;C:\\SymbolDir2",
  "externalConsole": true,
  "logging": {
    "moduleLoad": false,
    "trace": true
  },
  "visualizerFile": "${workspaceFolder}/my.natvis",
  "showDisplayString": true
}

配置目标应用程序

以下选项允许您在目标应用程序启动时修改其状态:

args

JSON 命令行参数数组,在程序启动时传递。示例[“arg1”,“arg2”]. 如果你在逃脱角色,你需要双重逃脱。例如,[“{\\\”arg1\\\“: true}”]会发送{“arg1”: true}对你的申请来说。

慢性消耗病

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

环境

为程序添加环境变量。示例:[ { “name”: “config”, “value”: “Debug” } ],不是[ { “config”: “调试” } ].

示例:

{
  "name": "C++ Launch",
  "type": "cppdbg",
  "request": "launch",
  "program": "${workspaceFolder}/a.out",
  "args": ["arg1", "arg2"],
  "environment": [{ "name": "config", "value": "Debug" }],
  "cwd": "${workspaceFolder}"
}

定制GDB或LLDB

你可以通过设置以下选项来更改GDB或LLDB的行为:

米莫德

表示VS Code将连接到的调试器。必须设置为GDBLLDB. 该系统在每个作系统上预先配置,并可根据需要进行更改。

miDebuggerPath

指向调试器的路径(如 gdb)。当仅指定执行文件时,它会在作系统的 PATH 变量中搜索调试器(Linux 和 Windows 为 GDB,OS X 为 LLDB)。

miDebuggerArgs

需要传递给调试器的额外参数(如 gdb)。

stopAtEntry(入口停止)

如果设置为 true,调试器应在目标的入口点停止(附加时忽略)。默认值为错误.

stopAtConnect

如果设置为 true,调试器连接目标后应停止。若设置为 false,调试器连接后将继续。默认值为错误.

设置命令

JSON 数组命令,用于执行以设置 GDB 或 LLDB。示例:“setupCommands”: [ { “text”: “target-run”, “description”: “run target”, “ignoreFailures”: false }].

自定义启动设置命令

如果提供,这会用其他命令替代用于启动目标的默认命令。例如,可以是“-target-attach”,以便附加到目标进程。空命令列表则将启动命令替换为无,这在调试器被命令行提供启动选项时非常有用。示例:“customLaunchSetupCommands”: [ { “text”: “target-run”, “description”: “run target”, “ignoreFailures”: false }].

发射完成命令

在调试器完全设置好后执行命令,以促使目标进程运行。允许的值为“exec-run”、“exec-continue”、“None”。默认值为“exec-run”。

示例:

{
  "name": "C++ Launch",
  "type": "cppdbg",
  "request": "launch",
  "program": "${workspaceFolder}/a.out",
  "stopAtEntry": false,
  "customLaunchSetupCommands": [
    { "text": "target-run", "description": "run target", "ignoreFailures": false }
  ],
  "launchCompleteCommand": "exec-run",
  "linux": {
    "MIMode": "gdb",
    "miDebuggerPath": "/usr/bin/gdb"
  },
  "osx": {
    "MIMode": "lldb"
  },
  "windows": {
    "MIMode": "gdb",
    "miDebuggerPath": "C:\\MinGw\\bin\\gdb.exe"
  }
}

symbol加载信息

  • loadAll:如果为真,所有库的符号都会被加载,否则不会加载任何 solib 符号。由 ExceptionList 修改。默认值为 true。
  • exceptionList:文件名列表(允许万用符),用分号分隔。修改 LoadAll 的行为。如果 LoadAll 为真,则不要加载与列表中任何名称匹配的库符号。否则只加载匹配的库符号。示例:;“foo.so;bar.so”

调试转储文件

C/C++扩展支持在Windows上调试转储文件,Linux和OS X中则支持核心转储文件。

dumpPath

如果你想调试Windows转储文件,将它设置为转储文件的路径,以便在发射配置。

coreDumpPath

完整路径指向核心转储文件以调试指定程序。将此路径设置为核心转储文件的路径,以便开始在发射配置。注意:MinGw 不支持核心转储调试。

远程调试或使用本地调试服务器进行调试

miDebuggerServerAddress

用于远程调试的调试服务器(例如gdbserver)的网络地址(例如:本地主持:1234).

debugServerPath

调试服务器的完整路径,直到启动。

debugServerArgs

调试器服务器的参数。

服务器启动

在调试服务器输出中寻找服务器启动模式。支持正则表达式。

filterStdout

如果设置为 true,则搜索学生服务器启动模式的流,日志标准输出用于调试输出。默认值为确实如此.

filterStderr

如果设置为 true,则搜索特别流用于服务器启动模式,日志 stderr 用于调试输出。默认值为错误.

serverLaunchTimeout

以毫秒计,调试器等待调试服务器启动。默认值为10000。

管道传输

有关附加到远程进程的信息,例如在 Docker 容器中调试进程,请参阅 Pipe 传输设置文章。

硬件断点

如果提供,则明确控制远程目标的硬件断点行为。如果要求设置为true,始终使用硬件断点。默认值为错误.极限是可用硬件断点数量的可选限制,仅在要求为真且极限大于0。默认值为0。示例:“hardwareBreakpoints”: { 需要:true, limit: 6 }.

附加属性

processID

默认${command:pickProcess}它会显示调试器可以连接的可用进程列表。我们建议保持默认,但可以显式地将该属性设置为特定进程ID,供调试器附加。

请求

表示配置部分是否旨在发射该程序或附着连接到已经运行的实例。

目标架构

已弃用由于目标架构已被自动检测,此选项不再需要。

类型

表示所使用的底层调试器。一定是CPPVSDBG当使用 Visual Studio 的 Windows 调试器时,CPPPDBG在使用GDB或LLDB时。当launch.json文件被创建。

来源FileMap

这允许对源到本地源位置的编译时路径进行映射。它是键值对的对象,会解析第一个字符串匹配路径。(示例:“sourceFileMap”: { “/mnt/c”: “c:\\” }将映射调试器返回的任何路径,开头为/mnt/c并将其转换为c:\\.你可以在对象中设置多个映射,但它们会按照提供的顺序处理。)

环境变量定义文件

环境变量定义文件是一个简单的文本文件,包含以environment_variable=值,用于评论。不支持多线值。#

CPPVSDBG调试器配置还包含一个envFile该属性允许你轻松设置调试变量。

例如:

project.env 文件

# project.env

# Example environment with key as 'MYENVRIONMENTPATH' and value as C:\\Users\\USERNAME\\Project
MYENVRIONMENTPATH=C:\\Users\\USERNAME\\Project

# Variables with spaces
SPACED_OUT_PATH="C:\\This Has Spaces\\Project"

符号期权

symbolOptionselement 允许自定义调试器如何搜索符号。示例:

    "symbolOptions": {
        "searchPaths": [
            "C:\\src\\MyOtherProject\\bin\\debug",
            "https://my-companies-symbols-server"
        ],
        "searchMicrosoftSymbolServer": true,
        "cachePath": "%TEMP%\\symcache",
        "moduleFilter": {
            "mode": "loadAllButExcluded",
            "excludedModules": [ "DoNotLookForThisOne*.dll" ]
        }
    }

性质

searchPaths:符号服务器 URL(例如:https://msdl.microsoft.com/download/symbols)或目录(例如:/build/symbols)的数组,用于搜索 .pdb 文件。这些目录除了默认位置外还会被搜索——模块旁边和 pdb 最初放置路径。

searchMicrosoftSymbolServer: 如果确实如此Microsoft符号服务器(https://msdl.microsoft.com/download/symbols)被添加到符号搜索路径中。如果未指定,该选项默认为错误.

cachePath“:应缓存从符号服务器下载的符号的目录。如果未指定,调试器默认为 %TEMP%\SymbolCache..

moduleFilter.mode:该值为以下“loadAllButExcluded”“loadOnlyIncluded”.在“loadAllButExcluded”调试器加载所有模块的符号,除非模块在“excludedModules”数组中。在“loadOnlyIncluded”在模式下,调试器不会尝试加载任何模块的符号,除非该模块在“includedModules”数组中,或者通过“includeSymbolsNextToModules”设置被包含。

的性质“loadAllButExcluded”模式

moduleFilter.excludedModules:调试器不应加载符号的模块数组。支持万用卡(例如:MyCompany.*.dll)。

的性质“loadOnlyIncluded”模式

moduleFilter.includedModules:调试器应加载符号的模块数组。支持万用卡(例如:MyCompany.*.dll)。

moduleFilter.includeSymbolsNextToModules:如果为真,对于任何不在“includedModules”数组中的模块,调试器仍会检查模块本身和启动可执行文件旁边的路径,但不会检查符号搜索列表上的路径。该选项默认为“true”。