准备

  默认情况下,VSCode仅仅内置了对node.js运行时的调试支持,只可以直接调试JavaScript、TypeScript和任何其他翻译为JavaScript的语言。其他语言的调试支持,都是以插件的形式提供支持。为了能够调试C/C++,必须首先安装插件:ms-vscode.cpptools。直接在VSCode的插件库中安装即可。
  C/C++插件是负责与VSCode的调试规约打交道的,实际的调试必须有对应的调试器。目前在Windows下,VSCode支持GDBLLDBVC调试器

调试配置

  首先下载DGB环境。下载MinGW-w64(目前最新版为 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}/main.exe",      // 要调试的程序(完整路径,支持相对路径)"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\\gdb.exe",     // miDebugger的路径,该值必须设置。尽管会自动搜索"setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]}},{ // 不用关心"name": "C++ Attach","type": "cppdbg","request": "attach","program": "${workspaceRoot}/main.exe","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 文件. 使用方法参见 Natvis syntax reference

showDisplayString: 当指定visualizerFile时,showDisplayString将启用显示字符串。 打开此选项可能会导致调试期间性能下降。

Example:

{"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": "${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代码将连接到的调试器。 必须设置为gdblldb。这是基于每个操作系统预配置的,可以根据需要进行更改。

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\\gdb.exe"}
}

调试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. 并不是所有参数都需要,部分参数在不使用时必须删除。例如:environment

关于VSCode编译源码

  VSCode用于强大的Task。VSCode的调试器定义了大量的参数,其中就包括使用preLaunchTask:task名参数调用指定的任务。在制定了该参数后,直接启动调试会出现以下提示:

点击Configure Task Runner后,会出现以下界面:

随便选一个即可!然后,VSCode会自动生成名为Task.json的文件,修改如下即可:

{"version": "0.1.0","command": "g++","args": ["-g", "${file}", "-o", "main.exe"], // 编译命令参数"problemMatcher": {"owner": "cpp","fileLocation": ["relative", "${workspaceRoot}"],"pattern": {"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$","file": 1,"line": 2,"column": 3,"severity": 4,"message": 5}}
}

关于VSCode的Task的详细说明,参见官方文档。
关于VSCode的Debugging的详细说明,参见官方文档。

调试

来到调试界面,运行调试如下:

参考

vscode-cpptools

Visual Studio Code (VSCode) 之 C/C++ 调试配置详解相关推荐

  1. 整理:使用 Visual Studio Code (vscode) 编写、运行、 调试 Java 应用程序

    作为一个喜欢折腾的人,最近抽空折腾一下VScode怎么写java程序.不断更新中.. 附一个原来写的C++的:这两个链接,第二个稍微简单一些 1)Visual Studio Code配置C.C++环境 ...

  2. Visual Studio Code(VSCode) 编辑/编译/调试 C++ 代码

    前言 最近想要切换编辑工具,之前工作中使用过 Source Insight,Eclipse,CLion 来写 C++ 代码.目前来说 Source Insight 已经非常古老,只有编写代码还说得过去 ...

  3. 编辑器推荐:Visual Studio Code(VSCode/VSC)

    简介 Visual Studio Code(以下简称vscode),是微软的一款轻量且强大的编辑器,支持Windows,OS X和Linux.内置JavaScript.TypeScript和Node. ...

  4. Visual Studio Code | VSCode设置语言

    文章目录 一.定义介绍 二.操作教程 1.设置语言 一.定义介绍   本节讲述如何设置VSCode的语言(如:中文.英文等). 二.操作教程 1.设置语言 ①使用快捷键"Ctrl+Shift ...

  5. mac下Visual Studio Code (vscode) 配置C++开发

    一.安装command line tool指令: xcode-select --install 一.下载vscode    Visual Studio Code - Code Editing. Red ...

  6. Visual Studio Code (VScode)支持哪些编程语言

    Visual Studio Code(VS Code)近年来获得了爆炸式增长,成为广大开发者工具库中的必备神器.它作为一个开源项目,也吸引了无数第三方开发者和终端用户,成为顶尖开源项目之一.它在功能上 ...

  7. qstudio c语言中文网,再整理:Visual Studio Code(vscode)下的通用C语言环境搭建

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 主要流程: 1.vscode的下载与简单配置 2.MinGw的下载与安装 3.配置系统环境变量 4 ...

  8. Windows 10下 Visual Studio Code (VSCode) 和 TypeScript 入门

    需要安装 Chrome VSCode这货调试客户端JavaScript代码需要通过Chrome进行 https://www.google.cn/chrome/ 安装 VSCode https://co ...

  9. 整理:Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++(主要Windows、简要Linux)

    2020年2月22日更新,又按照自己的帖子尝试了以下,感觉大的思路是没问题的啊,小改动用紫色的标记标注出来了,另外如评论区所说删去了部分旧版本的内容和图片,不知道为啥评论区的留言我都没收到邮件... ...

最新文章

  1. C++中使用Json的方法
  2. 静态类和单例模式之间的区别?
  3. ISA2006标准版无人值守安装
  4. 又被野外利用了!新曝光Office产品多个远程命令执行漏洞分析
  5. react-native props和state传值
  6. Linux 的内存分页管理
  7. OpenCV学习笔记——多种Smooth平滑处理
  8. Percona XtraDB Cluster(PXC)原理
  9. MATLAB数据拟合(附代码)
  10. selenium自动化测试01
  11. win10禁用驱动程序强制签名_Win10系统永久禁用驱动数字签名的方法是什么?
  12. 安装MySQL出现:无法定位序数4699于动态链接库 ...\bin\mysqld.exe
  13. 8、项目管理基础知识
  14. java基础总结-java技术栈快速复习
  15. ASBR上配置外部OSPF路由汇总
  16. [网站] 中国古代名画鉴赏网站
  17. 【英语】 英语的重音怎么读
  18. JavaScript学习笔记(一)
  19. 嵌入式应用-详解移植并使用freetype显示文字
  20. C语言中 srand()函数和rand()函数

热门文章

  1. 仔细讨论 C/C++ 字节对齐问题⭐⭐
  2. js面向对象和继承的碎碎念
  3. JavaWeb学习总结(四十九)——简单模拟Sping MVC
  4. MS CRM 2011中,对于多实体数据文件的导入
  5. 如何把winPE装到硬盘隐藏起来
  6. 笔记本上使用Archlinux[转]
  7. firefox设置代理服务器
  8. idea设置java scala等代码自动换行
  9. js 语法:JSON.stringify(data, null, 4)
  10. Scala集合:Set集合