Configure C/C++ debugging

Configure C/C++ debugging

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

Visual Studio Code 会生成一个 launch.json (位于项目的 .vscode 文件夹下),其中几乎包含了所有必需的信息。要开始调试,您需要填写 program 字段,指定要调试的可执行文件的路径。这必须同时在 launch 和 attach (如果您计划随时附加到正在运行的实例)配置中指定。

生成的文件包含两个部分,一个配置了 launch 调试,另一个配置了 attach 调试。
在这里插入图片描述

Configure VS Code’s debugging behavior

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

program (必填)
指定调试器将启动或附加的可执行文件的完整路径。调试器需要此位置来加载调试符号。

symbolSearchPath
告诉 Visual Studio Windows 调试器在哪里搜索符号 (.pdb) 文件。用分号分隔多个路径。例如: “C:\Symbols;C:\SymbolDir2”。

requireExactSource
一个可选标志,告诉 Visual Studio Windows 调试器要求当前源代码与 pdb 完全匹配。

additionalSOLibSearchPath
告诉 GDB 或 LLDB 搜索 .so 文件的路径。用分号分隔多个路径。例如: “/Users/user/dir1;/Users/user/dir2”。

在这里插入图片描述
externalConsole
仅在启动被调试程序时使用。对于 attach,此参数不会改变被调试程序的行为。

  • 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 集成终端,该扩展会添加控制台重定向命令到被调试程序的参数,以便将控制台输入和输出显示在集成终端中。将此选项设置为 true 将禁用它。
在这里插入图片描述
logging
确定应该将哪种类型的消息记录到"调试控制台"的可选标志。

  • exceptions: 确定是否将异常消息记录到"调试控制台"的可选标志。默认为 true。
  • moduleLoad: 确定是否将模块加载事件记录到"调试控制台"的可选标志。默认为 true。
  • programOutput: 确定是否将程序输出记录到"调试控制台"的可选标志。默认为 true。
  • engineLogging: 确定是否将诊断引擎日志记录到"调试控制台"的可选标志。默认为 false。
  • trace: 确定是否将诊断适配器命令跟踪记录到"调试控制台"的可选标志。默认为 false。
  • traceResponse: 确定是否将诊断适配器命令和响应跟踪记录到"调试控制台"的可选标志。默认为 false。

visualizerFile
在调试时使用的 .natvis 文件。有关如何创建 Natvis 文件的信息,请参见"创建本机对象的自定义视图"。

showDisplayString
当指定了 visualizerFile 时,showDisplayString 将启用显示字符串。打开此选项可能会在调试期间导致性能下降。
在这里插入图片描述

在这里插入图片描述

Configure the target application

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

args
传递给程序的命令行参数的 JSON 数组。例如 [“arg1”, “arg2”]。如果需要转义字符,则需要进行双转义。例如, [“{“arg1”: true}”] 将向应用程序发送 {“arg1”: true}。

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

environment
要添加到程序环境中的环境变量。例如: [ { “name”: “config”, “value”: “Debug” } ], 而不是 [ { “config”: “Debug” } ]。
在这里插入图片描述
在这里插入图片描述

Customizing GDB or LLDB

以下是 GDB 或 LLDB 配置选项:

MIMode
指示 VS Code 将连接到的调试器。必须设置为 gdb 或 lldb。这是根据操作系统预先配置的,可以根据需要进行更改。

miDebuggerPath
调试器(如 gdb)的路径。仅指定可执行文件时,它将搜索操作系统的 PATH 变量以找到调试器(Linux 和 Windows 上的 GDB,macOS 上的 LLDB)。

miDebuggerArgs
传递给调试器(如 gdb)的其他参数。
在这里插入图片描述

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

stopAtConnect
如果设置为 true,调试器应该在连接到目标后停止。如果设置为 false,调试器将在连接后继续。默认值为 false。

setupCommands
要按顺序执行以设置 GDB 或 LLDB 的 JSON 数组命令。例如: “setupCommands”: [ { “text”: “target-run”, “description”: “run target”, “ignoreFailures”: false }]。
在这里插入图片描述

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

launchCompleteCommand
调试器完全设置好后要执行的命令,以使目标进程运行。允许的值为 “exec-run”、“exec-continue”、“None”。默认值为 “exec-run”。
在这里插入图片描述
在这里插入图片描述

关于 symbolLoadInfo 的选项:

symbolLoadInfo

loadAll: 如果设置为 true,则会加载所有库的符号,否则不会加载任何动态共享库的符号。可由 exceptionList 修改。默认值为 true。
exceptionList: 以分号 ; 分隔的文件名列表(支持通配符)。修改 LoadAll 的行为。如果 LoadAll 为 true,则不会加载与列表中任何名称匹配的库的符号。否则只会加载与列表匹配的库的符号。例如: “foo.so;bar.so”

在这里插入图片描述

Debugging dump files

C/C++ 扩展程序支持在 Windows 上调试转储文件和在 Linux 和 macOS 上调试核心转储文件。

dumpPath
如果要调试 Windows 转储文件,请在启动配置中将此设置为转储文件的路径以开始调试。

coreDumpPath
要调试的程序的完整核心转储文件路径。在启动配置中设置此选项以开始调试核心转储。注意:MinGw 不支持核心转储调试。
在这里插入图片描述

Remote debugging or debugging with a local debugger server

远程调试或使用本地调试器服务器进行调试的相关选项:

miDebuggerServerAddress
用于远程调试的调试器服务器(如 gdbserver)的网络地址(例如: localhost:1234)。

debugServerPath
调试服务器的完整路径。

debugServerArgs
调试器服务器的参数。

serverStarted
在调试服务器输出中搜索的服务器启动模式。支持正则表达式。
在这里插入图片描述

filterStdout
如果设置为 true,则搜索标准输出流以查找服务器启动模式,并将标准输出记录到调试输出。默认值为 true。

filterStderr
如果设置为 true,则搜索标准错误流以查找服务器启动模式,并将标准错误记录到调试输出。默认值为 false。

serverLaunchTimeout
调试器等待调试服务器启动的时间(以毫秒为单位)。默认值为 10000。

pipeTransport
有关附加到远程进程(如在 Docker 容器中调试进程)的信息,请参阅 Pipe transport settings 文章。
在这里插入图片描述

hardwareBreakpoints
如果提供,这将明确控制远程目标的硬件断点行为。如果 require 设置为 true,则始终使用硬件断点。默认值为 false。 limit 是在 require 为 true 且 limit 大于 0 时强制执行的可用硬件断点数量的可选限制。默认值为 0。示例: “hardwareBreakpoints”: { require: true, limit: 6 }。
在这里插入图片描述

这些选项允许您配置远程调试或使用本地调试器服务器进行调试的各种设置,以满足不同的调试需求。

Additional properties

还有一些其他的属性可以配置:

processId
默认值为 ${command:pickProcess},它将显示调试器可以附加到的可用进程列表。我们建议您保留此默认值,但也可以将此属性显式设置为特定的进程 ID,以便调试器附加到该进程。

request
指示配置部分是打算启动程序还是附加到正在运行的实例。

targetArchitecture
已弃用。此选项不再需要,因为目标体系结构会自动检测。
在这里插入图片描述

type
指示正在使用的底层调试器。当使用 Visual Studio Windows 调试器时必须为 cppvsdbg,当使用 GDB 或 LLDB 时必须为 cppdbg。创建 launch.json 文件时会自动设置为正确的值。

sourceFileMap
这允许将源代码的编译时路径映射到本地源代码位置。它是一个键/值对对象,将解析第一个字符串匹配的路径。(例如: “sourceFileMap”: { “/mnt/c”: “c:” } 将把调试器返回的任何以 /mnt/c 开头的路径映射到 c:\ 。您可以在对象中有多个映射,但它们将按照提供的顺序处理。)
在这里插入图片描述

Environment variable definitions file

环境变量定义文件是一个简单的文本文件,其中包含以 environment_variable=value 形式的键值对,使用 # 进行注释。不支持多行值。

cppvsdbg 调试器配置还包含一个 envFile 属性,允许您轻松地为调试目的设置变量。
在这里插入图片描述

例如:

project.env 文件:
在这里插入图片描述

Symbol Options

The symbolOptions element allows customization of how the debugger searches for symbols. Example:

在这里插入图片描述

Properties:

searchPaths: 这是一个数组,包含需要搜索 .pdb 文件的符号服务器 URL 或目录。这些目录会被搜索,除了默认位置(模块旁边和 pdb 最初被放置的路径)。
searchMicrosoftSymbolServer: 如果设置为 true,则会将 Microsoft Symbol 服务器 (https://msdl.microsoft.com/download/symbols) 添加到符号搜索路径。如果未指定,此选项默认为 false。
cachePath: 这是一个目录,用于缓存从符号服务器下载的符号。如果未指定,调试器将默认使用 %TEMP%\SymbolCache。
在这里插入图片描述

moduleFilter.mode:

  • “loadAllButExcluded”: 调试器会加载所有模块的符号,除非该模块在 ‘excludedModules’ 数组中。
  • “loadOnlyIncluded”: 调试器不会尝试加载任何模块的符号,除非该模块在 ‘includedModules’ 数组中,或通过 ‘includeSymbolsNextToModules’ 设置包含。
    moduleFilter.excludedModules: 在 “loadAllButExcluded” 模式下,这是一个数组,包含调试器不应加载符号的模块。支持通配符。
    moduleFilter.includedModules: 在 “loadOnlyIncluded” 模式下,这是一个数组,包含调试器应加载符号的模块。支持通配符。
    moduleFilter.includeSymbolsNextToModules: 如果设置为 true,对于任何不在 ‘includedModules’ 数组中的模块,调试器仍然会检查该模块本身和启动可执行文件旁边的位置,但不会检查符号搜索列表上的路径。默认为 true。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/38124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【从零开始学架构 架构基础】四 架构设计的复杂度来源:可扩展性复杂度来源

架构设计的复杂度来源其实就是架构设计要解决的问题,主要有如下几个:高性能、高可用、可扩展、低成本、安全、规模。复杂度的关键,就是新旧技术之间不是完全的替代关系,有交叉,有各自的特点,所以才需要具体…

新书速览|Linux C与C++一线开发实践

《Linux C与C一线开发实践》 本书内容 Linux C/C编程在Linux应用程序开发中占有重要的地位,掌握这项技术将在就业竞争中立于不败之地。《Linux C与C一线开发实践》内容针对初中级读者,贴近软件公司一线开发实践。全书厚达620多页,知识点丰富…

51单片机第6步_stdlib.h库函数

本章重点学习stdlib.h库函数。 #include <REG51.h> //包含头文件REG51.h,使能51内部寄存器; #include <stdlib.h> //float atof (char *s1); //参数s1字符串可包含正负号,小数点或E(e)来表示指数部分,如123.456或123e-2; //若首字符是非数据字符,或为正负号…

[NSSCTF]-Reverse:[SWPUCTF 2021 新生赛]easyapp(安卓逆向,异或)

无壳 把后缀名改为zip&#xff0c;找到apk 查看jadx 这里调用了MainActivity的lambda$onCreate$0$MainActivity&#xff0c;然后又调用了Encoder进行异或。 exp&#xff1a; result棿棢棢棲棥棷棊棐棁棚棨棨棵棢棌 key987654321 flag for i in range(len(result)):flagchr(…

HarmonyOS开发:应用完整性校验

简介 为了确保应用的完整性和来源可靠&#xff0c;OpenHarmony需要对应用进行签名和验签。 应用开发阶段&#xff1a; 开发者完成开发并生成安装包后&#xff0c;需要开发者对安装包进行签名&#xff0c;以证明安装包发布到设备的过程中没有被篡改。OpenHarmony的应用完整性校…

关于响应式编程的理解与SpringCloudGateway的理解

关于响应式编程的理解与SpringCloudGateway的理解 一. 响应式编程与函数式编程的区别二. 响应式编程中常用的组件2.1 RxJava定义2.2 Rxjava基本概念2.3 RxJava 用法 三 SpringcloudGateway四 常见的四种限流规则 一. 响应式编程与函数式编程的区别 总的来说&#xff0c;响应式编…

GPIO和PIN

文章目录 1 GPIO和Pin1.1 GPIO和Pin基础概念1.2 GPIO输入模式1.3 GPIO输出模式1.4 GPIO的HAL库1.4.1 一些HAL库表示1.4.2 HAL库常用GPIO函数1.4.3 GPIO点亮led灯程序例子 1 GPIO和Pin 1.1 GPIO和Pin基础概念 ​ 单片机有很多的引脚&#xff0c;为了操控每一个引脚&#xff0c…

grpc学习golang版( 四、多服务示例 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、前言二、定义proto文件三、编写server服务端四、编写Client客…

MySQL之可扩展性(九)

可扩展性 直接连接 2.修改应用的配置 还有一个分发负载的办法是重新配置应用。例如&#xff0c;你可以配置多个机器来分担生成大报表操作的负载。每台机器可以配置成连接到不同的MySQL备库&#xff0c;并为第N个用户或网站生成报表。 这样的系统很容易实现&#xff0c;但如果…

Spring Boot集成jasypt快速入门Demo

1.什么是Jasypt&#xff1f; Jasypt&#xff08;Java Simplified Encryption&#xff09;是一个专注于简化Java加密操作的工具。 它提供了一种简单而强大的方式来处理数据的加密和解密&#xff0c;使开发者能够轻松地保护应用程序中的敏感信息&#xff0c;如数据库密码、API密…

stl的map和set

概念 map和set底层都是红黑树 set是key模型结构&#xff0c;本质就是看一个元素在不在容器中。 map是key/value结构&#xff0c;里面存了一个pair结构&#xff0c;可以通过一个值来查找另外一个值 map和set结构中遍历出来的都是有序并且去重了的&#xff0c;map和set都支持增…

Java高级重点知识点-17-异常

文章目录 异常异常处理自定义异常 异常 指的是程序在执行过程中&#xff0c;出现的非正常的情况&#xff0c;最终会导致JVM的非正常停止。Java处 理异常的方式是中断处理。 异常体系 异常的根类是 java.lang.Throwable&#xff0c;&#xff0c;其下有两个子类&#xff1a;ja…

【QT】概述|对象树模型|两种控件模式|信号和槽|lambda

目录 什么是QT 特点 QT程序 main函数 QT按钮 纯代码模式 图形化模式 对象树模型 信号和槽 连接与断开 自动连接 断开连接 信号的发射 lambda表达式 基本语法 捕获列表 Lambda表达式用于信号与槽的连接 例如 什么是QT Qt是一个跨平台的C图形用户界面应用…

办理河南公司企业信用等级3A证书流程和条件

企业信用等级3A证书属于一种荣誉资质&#xff0c;是提升企业公信力和影响力保障的一项资质。信用等级是信用 (资信)评估机构根据企业资信评估结果对企业信用度划分的等级类别&#xff0c;它反映了企业信用度的高低。AAA信用等级是一种等级划分。代指企业的信用经过行业、机构评…

零成本搭建个人图床服务器

前言 图床服务器是一种用于存储和管理图片的服务器&#xff0c;可以给我们提供将图片上传后能外部访问浏览的服务。这样我们在写文章时插入的说明图片&#xff0c;就可以集中放到图床里&#xff0c;既方便多平台文章发布&#xff0c;又能统一管理和备份。 当然下面通过在 Git…

中药材图像识别:中医与深度学习的融合(目标检测)

亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 一、引…

flink的窗口

目录 窗口分类 1.按照驱动类型分类 1. 时间窗口&#xff08;Time window&#xff09; 2.计数窗口&#xff08;Count window&#xff09; 2.按照窗口分配数据的规则分类 窗口API分类 API调用 窗口分配器器&#xff1a; 窗口函数 增量聚合函数&#xff1a; 全窗口函数…

MySQL高级-MVCC-原理分析(RC级别)

文章目录 1、RC隔离级别下&#xff0c;在事务中每一次执行快照读时生成ReadView2、先来看第一次快照读具体的读取过程&#xff1a;3、再来看第二次快照读具体的读取过程: 1、RC隔离级别下&#xff0c;在事务中每一次执行快照读时生成ReadView 我们就来分析事务5中&#xff0c;两…

VBA代码解决方案第十五讲:如何对单元格区域进行高亮显示

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程&#xff0c;目前已经是第三版修订了。这套教程定位于入门后的提高&#xff0c;在学习这套教程过程中&#xff0c;侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

【操作系统期末速成】EP06 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;☀️☀️☀️2.1 考点十四&#xff1a;同步互斥的基本概念2.2 考点十五&#xff1a;实现临界区互斥的基本方法2.3 考点十六&#xff1a;信号量的含义及常用信号量 一、前言&#x1f680;&#x1…