VisualStudioCode(VSCode)之CC++调试配置详解
准备
  默认情况下,VSCode仅仅内置了对node.js运⾏时的调试⽀持,只可以直接调试JavaScript、TypeScript和任何其他翻译为JavaScript的语⾔。其他语⾔的调试⽀持,都是以插件的形式提供⽀持。为了能够调试C/C++,必须⾸先安装插件:ms-vscode.cpptools。直接在VSCode的插件库中安装即可。
  C/C++插件是负责与VSCode的调试规约打交道的,实际的调试必须有对应的调试器。⽬前在Windows下,VSCode⽀持GDB、LLDB、VC调试器。
调试配置
  ⾸先下载DGB环境。下载(⽬前最新版为 5.01)。下载后将bin⽬录添加到环境变量中。如下图:
也可以选择MinGW或者Cygwin。
VSCode的调试使⽤起来很简单,如下图所⽰:
  VSCode的特⾊之⼀就是原⽣⽀持在线调试功能。VSCode 提供了两种调试⽅式:Launch和Attach。因此,在⾃动⽣成的配置⽂件中,这两种⽅式都会有。使⽤者需要那种配置哪⼀种即可,当然可以都配置好。这⾥,我们选择C++(GDB/LLDB)之后,VSCode会⾃动⽣成lanuch.json的⽂件,如下:
{
"version":"0.2.0",
"configurations":[{
"name":"C++ Launch",// 配置名称,将会在调试配置下拉列表中显⽰
"type":"cppdbg",// 调试器类型:Windows表⽰器使⽤cppvsdbg;GDB和LLDB使⽤cppdbg。该值⾃动⽣成
"request":"launch",// 调试⽅式
"program":"${workspaceRoot}/",// 要调试的程序(完整路径,⽀持相对路径)
"args":[],// 传递给上⾯程序的参数,没有参数留空即可
"stopAtEntry":false,// 是否停在程序⼊⼝点(停在main函数开始)
"cwd":"${workspaceRoot}",// 调试程序时的⼯作⽬录
"environment":[],
"externalConsole":true,// 调试时是否显⽰控制台窗⼝
"linux":{// 下⾯是Linux平台下,需要配置的参数,这⾥暂时不⽤关⼼
"MIMode":"gdb",
"setupCommands":[{
"description":"Enable pretty-printing for gdb",
"text":"-enable-pretty-printing",
"ignoreFailures":true
}]
},
"osx":{// 下⾯是Mac平台下,需要配置的参数,这⾥暂时不⽤关⼼
"MIMode":"lldb"
},
"windows":{// 下⾯是Windows平台下,需要配置的参数
"MIMode":"gdb",// VSCode要使⽤的调试⼯具
"miDebuggerPath":"E:\\mingw64\\bin\\",// miDebugger的路径,该值必须设置。尽管会⾃动搜索
"setupCommands":[{
"description":"Enable pretty-printing for gdb",
"text":"-enable-pretty-printing",
"ignoreFailures":true
}]
}
},
{// 不⽤关⼼
"name":"C++ Attach",
"type":"cppdbg",
"request":"attach",
"program":"${workspaceRoot}/",
"processId":"${command.pickProcess}",// 要Attach的进程ID
"linux":{
"MIMode":"gdb",
"setupCommands":[{
"description":"Enable pretty-printing for gdb",
"text":"-enable-pretty-printing",
"ignoreFailures":true
}]
},
"osx":{
"MIMode":"lldb"
},
"windows":{
"MIMode":"gdb",
"setupCommands":[{
"description":"Enable pretty-printing for gdb",
"text":"-enable-pretty-printing",
"ignoreFailures":true
}]
}
}
]
}
接下来对配置⽂件进⾏详细说明。配置⽂件分为两⼤部分:launch配置 和 attach配置。分别针对VSCode的两种调试⽅式。
vscode-cpptools调试参数详解
注意:以下为的翻译。
配置VSCode的调试⾏为
设置或更改以下选项以在调试期间控制 VSCode 的⾏为:
**program:**需要调试的程序(必须为完整程序路径,可以使⽤VSCode的环境变量)
symbolSearchPath: 告诉Visual Studio Windows Debugger搜索符号(.pdb)⽂件的路径。 ⽤分号分隔多个路径。additionalSOLibSearchPath: 告诉GDB或LLDB搜索.so⽂件的路径。 ⽤分号分隔多个路径。
externalConsole: 如果设置为true,则为应⽤程序启动外部控制台。 如果为false,则不会启动控制台,并使⽤VS Code的内置调试控制台。 请注意,由于技术原因,在某些情况下会忽略此选项。
logging: 可选标志,⽤于确定应将哪些类型的消息记录到调试控制台
exceptions:⽤于确定异常消息是否应记录到调试控制台的可选标志。 默认为true。
moduleLoad: ⽤于确定模块加载事件是否应记录到调试控制台的可选标志。 默认为true。
programOutput: ⽤于确定程序输出是否应记录到调试控制台的可选标志。 默认为true。
engineLogging: ⽤于确定诊断引擎⽇志是否应记录到调试控制台的可选标志。 默认为false。
trace: ⽤于确定是否应将诊断适配器命令跟踪记录到调试控制台的可选标志。 默认为false。
traceResponse: ⽤于确定是否应将诊断适配器命令和响应跟踪记录到调试控制台的可选标志。 默认为false。
visualizerFile: 调试时使⽤.natvis ⽂件. 使⽤⽅法参见
showDisplayString: 当指定visualizerFile时,showDisplayString将启⽤显⽰字符串。 打开此选项可能会导致调试期间性能下降。
Example:
{
"name":"C++ Launch (Windows)",
"type":"cppvsdbg",
"request":"launch",
"program":"C:\\app1\\Debug\\",
"symbolSearchPath":"C:\\Symbols;C:\\SymbolDir2",
"externalConsole":true,
"logging":{
"moduleLoad":false,
"trace":true
},
"visualizerFile":"${workspaceRoot}/my.natvis",
"showDisplayString":"true"
}
配置⽬标应⽤程序
以下选项使您能够在启动时修改⽬标应⽤程序的状态
args: 启动时传递给程序的命令⾏参数的JSON数据。例如: ["arg1", "arg2].
cwd: 设置调试器启动的应⽤程序的⼯作⽬录。
environment: 针对调试的程序,要添加到环境中的环境变量. 例如: [ { "name": "squid", "value": "clam" } ]。注意:如果不使⽤必须删除,否则产⽣错误
Example:
{
"name":"C++ Launch",
"type":"cppdbg",
"request":"launch",
"program":"${workspaceRoot}/a.out",
"args":["arg1","arg2"],
"environment":[{"name":"squid","value":"clam"}],
"cwd":"${workspaceRoot}"
}
⾃定义GDB或LLDB
您可以通过设置以下选项来更改GDB或LLDB的⾏为。
MIMode: 指⽰VS代码将连接到的调试器。 必须设置为gdb或lldb。这是基于每个操作系统预配置的,可以根据需要进⾏更改。
miDebuggerPath: 调试器的路径(必须是完整路径)。 当未指定时,它将搜索操作系统的PATH变量来寻调试器(Linux和Windows上的GDB,OS X上的LLDB)。
stopAtEntry: 如果设置为true,调试器应该在⽬标的⼊⼝点停⽌(在attach⽅式时忽略)。 默认值为false。
setupCommands: 设置GDB或LLDB的命令的JSON数组。 例如:"setupCommands": [ { "text": "target-run", "description": "run target", "ignoreFailures": false }].
customLaunchSetupCommands: If provided, this replaces the default commands used to launch a target with some other commands. For example, this can be “-target-attach” in order to attach to a target process. An empty command list replaces the launch commands with nothing, which can be useful if the debugger is being provided launch options as command line options. Example: "customLaunchSetupCommands": [ { "text": "target-run", "description": "run target", "ignoreFailures": false }].
launchCompleteCommand: 完成调试器设置后执⾏的命令,以便使⽬标进程运⾏。 允许的值为“exec-run”,“exec-
continue”,“None”。 默认值为“exec-run”。
Example:
{
"name":"C++ Launch",
"type":"cppdbg",
"request":"launch",
"program":"${workspaceRoot}/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\\"
}
}
调试dump files
C / C ++扩展可以调试Windows上的dump files和Linux和OS X上的core dump files
dumpPath: 如果要调试Windows的dump files,请将其设置为dump files的路径以在启动配置中启动调试。
coreDumpPath: 指定程序调试的core dump files的完整路径。 将其设置为核⼼转储⽂件的路径,以在启动配置中启动调试。
core dump调试不受MinGw⽀持。
使⽤本地调试器服务器进⾏远程调试或本地调试
miDebuggerServerAddress: ⽤于远程调试的要连接的调试器服务器(例如gdbserver)的⽹络地址(
例如:localhost:1234)。
debugServerPath: 调试服务器启动的完整路径。
debugServerArgs: 调试器服务器的参数。
serverStarted: Server-started pattern to look for in the debug server output.
serverLaunchTimeout: 调试器等待debugServer启动的时间(以毫秒为单位)。 默认值为10000。
其他属性
processId: 默认为$ {command.pickProcess},它将显⽰调试器可以附加到的可⽤进程的列表。 建议保留此默认值,但可以将属性显式设置为调试器附加到的特定进程ID。
request: 指⽰配置部分是要“启动”程序还是“附加”到已经运⾏的实例。
targetArchitecture: Deprecated 不再需要此选项,⾃动检测到⽬标体系结构。
type: 指⽰正在使⽤的底层调试器。 在使⽤Visual Studio Windows调试器时必须是“cppvsdbg”,在使⽤GDB或LLDB时必须
是“cppdbg”。 在创建launch.json⽂件时,会⾃动设置为正确的值。
注意:
1. 部分不太了解的参数保留了原⽂
2. 并不是所有参数都需要,部分参数在不使⽤时必须删除。例如:environmentvisual studio和vs code的区别
关于VSCode编译源码
  VSCode⽤于强⼤的Task。VSCode的调试器定义了⼤量的参数,其中就包括使⽤preLaunchTask:task名参数调⽤指定的任务。在制定了该参数后,直接启动调试会出现以下提⽰:
点击Configure Task Runner后,会出现以下界⾯:
随便选⼀个即可!然后,VSCode会⾃动⽣成名为Task.json的⽂件,修改如下即可:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。