VScode调试复杂C/C++项目

news2024/11/18 9:44:54

以前都是用的VScode调试c/cpp的单个文件的编译和执行, 但是一遇到大型项目一般就用gdb了, gdb的调试效率和VScode差距还是比较大的, 但最近发现VScode其实也能调试复杂的cpp项目, 所以记录一下.

首先明确一下几点:

  • 首先cpp文件需要经过编译, 生成可执行文件, 然后通过运行/调试可执行文件达到我们想要的效果
  • VScode中的task.json对应编译过程, launch.json对应调试过程
  • VScode中的Code Runner插件只能运行, 不能调试, 配置在settings.json中, 和以上两个文件是相对独立, 互不影响的关系

我们的复杂C++项目当然不是通过单文件编译获得, 而是多个文件相互调用, 链接之后编译形成的, 最后会生成一个可执行文件, 假设为main, (我使用的是Ubuntu, 可执行文件没有后缀名)

项目简易结构为:

|--build
    |--main
|--include
    |--头文件 
|--lib
    |--依赖库
|--src
    |--源代码
|--test
    |--测试文件

运行 

我们首先试着运行main, 建议使用VScode中的Code Runner插件, 基本上一家一个了, 不多说

打开它的插件主页往后翻, 就能看到的他的详细配置过程:

 具体配置在settings中:

"code-runner.executorMap": {
        "cpp": "cd $workspaceRoot/build && $workspaceRoot/build/main"
    },
"code-runner.defaultLanguage": "cpp",
"code-runner.saveFileBeforeRun": true,
"code-runner.runInTerminal": false,

这个配置不太常规, 因为我们要运行的只有main文件, 所以我设置了无论当前文件在哪, 都默认运行main文件

这样项目点击右上角的三角形, 选择run code, 就能跑起来了

调试

调试的话, 我们只需要launch.json文件就行了, 因为一般编译过程比较复杂, 我假装已经编译好了, 那么我们就不需要task.json文件, launch.json文件中也不不需要"preLaunchTask"(调试前在编译一次)

我们的launch.json如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/main", // 要调试的只有main文件
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            // "preLaunchTask": "build"
        }
    ]
}

我们这个调试项目的名称叫"(gdb) Launch", 这样我们点击右上角的调试C/C++文件, 然后选择任务"(gdb) Launch", 就开始调试了!

VScode的自定义功能远比我要想的强大

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

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

相关文章

百度搜索逐步恢复优质网站权限

我是卢松松,点点上面的头像,欢迎关注我哦! 从9月25日开始,有越来越多的站长和卢松松反馈,说他们的站可以正常入驻百度搜索资源平台了。我也试了试卢松松博客,果然,可以正常提交了。还是以前的…

iTOP-3568开发板Ubuntu下安装ADB工具

在虚拟机 Ubuntu 使用以下命令安装 ADB,如下图所示: sudo apt install adb 接下来进行测试,执行如下命令,确认 adb 安装是否成功。 adb version 如上图所示,执行命令能成功获取到 adb 版本信息,说明 adb …

防火墙网络接口下面多个外网地址,只有第一地址可以访问通其他不通

环境: 主备防火墙 8.0.75 AF-2000-FH2130B-SC 问题描述: 两台防火墙双击热备,高可用防火墙虚拟网络接口Eth4下面有多个外网地址,只有第一地址可以访问通其他不通 解决方案: 1.检查防火墙路由设置(未解决…

3D WEB轻量化引擎HOOPS助力3D测量应用蓬勃发展:效率、精度显著提升

在3D开发工具领域,Tech Soft 3D打造的HOOPS SDK已经崭露头角,成为了全球领先的3D领域开发工具提供商。HOOPS SDK包括四种不同的3D软件开发工具,已成为行业的翘楚。 其中,HOOPS Exchange以其CAD数据转换的能力脱颖而出&#xff0c…

5.wifi开发【智能家居:上】,开发准备:智能开关灯,智能采集温湿,智能调彩灯

一。wifi智能家居项目开发 【开发准备1】:继电器控制开发 1.智能开关 器件准备:wifi(esp8266,使用CP2102)继电器 结果: 2.继电器工作原理 (1)继电器是一种自动电气开关 &#xff…

Multisim14.0仿真(二十六)基于LM555定时器的施密特触发器

一、仿真原理图: 二、仿真效果图:

01-工具篇-windows与linux文件共享

一般来说绝大部分PC上装的系统均是windows,为了开发linux程序,会在PC上安装一个Vmware的虚拟机,在虚拟机上安装ubuntu18.04,由于windows上的代码查看软件、浏览器,通信软件更全,我们想只用ubuntu进行编译&a…

【VUE复习·5】插值语法(使用 计算属性 的插值语法)

总览 1.计算属性 2.使用 methods 的 插值语法 3.使用 computed 的 插值语法 一、计算属性 1.解释 首先,如果我们要写一个插值语法,而 {{ }} 内的内容,是一个经过计算的值,那么按照原本 JS 的写法,应该是这样的&…

目标检测YOLO实战应用案例100讲-区域卷积网络在阴影环境目标检测上的研究与应用(下)

目录 5.2 阴影检测模块与街景检测模块实验设置 5.2.1 实验环境与工具 5.2.3 损失函数 5.2.4 实验具体流程 5.3 实验评估与对比 5.3.1 两类实验的评估标准 5.3.2 两类实验结果对比 阴影环境下街景目标检测系统的实现 6.1 系统概述 6.2 系统软硬件环境 6.3 功能模块设计 6.4 系统…

嵌入式Linux应用开发-IMX6ULL板硬件资源及开发环境

嵌入式Linux应用开发-IMX6ULL板硬件资源及开发环境 第一章 硬件资源1.1 板上资源1.2 板外模块 第二章 准备开发环境2.1 IMX6ULL 开发板接线与启动1) 连接串口线和电源线2) 安装 USB 串口驱动3) 选择启动方式4) 设置串口工具,启动开发板 第一章 硬件资源 iMX6ULL板是…

vlc将本地文件推流成ts实时流

推流 打开vlc ,打开 媒体----打开网络串流 选择文件选项卡,打开本地文件 点击添加,选择本地的mp3文件 选择串流 点击下拉框,选择udp,点击右边的【添加】按钮 输入媒体流输出地址,点击【下一个】 选择正确的…

《C++ Primer》第4章 表达式(一)

参考资料: 《C Primer》第5版《C Primer 习题集》第5版 4.1 基础(P120) 表达式由一个或多个运算对象组成,对表达式求值将得到一个结果。字面量和变量是最简单的表达式。 4.1.1 基本概念(P120) C 定义了…

淘宝拍立淘插件转链和商业化图片生成接口介绍,图片搜索商品接口,按图搜索接口,图片识别商品接口介绍

淘宝拍立淘是淘宝网推出的一种搜索方式,通过拍立淘,用户可以输入文字描述或上传图片来搜索商品。拍立淘通过与淘宝网进行数据接入和授权,使用淘宝提供的API获取商品信息和操作权限,拍立淘使用图像识别技术,通过深度学习…

【Java 进阶篇】深入理解SQL的数据操作语言(DML)

SQL(Structured Query Language)是一种用于管理和操作关系数据库的强大语言。SQL语言被分为多个子语言,其中之一是DML(Data Manipulation Language),用于执行与数据的操作和管理相关的任务。在本文中&#…

Ci2451-2.4g无线MCU收发芯片

Ci2451 是一款集成无线收发器和8位RISC(精简指令集)MCU的SOC芯片。 无线MCU解决方案,集成丰富的MCU资源、更小尺寸,来满足设计中的各种内存、功率、尺寸要求,充分缩短2.4GHz无线产品设计周期并优化产品成本。 添加图片注释,不超过 140 字(可选&#xff…

聚观早报 | 智界S7正式亮相;ChatGPT重磅更新

【聚观365】9月27日消息 智界S7正式亮相 ChatGPT重磅更新 PICO应用数量已超530款 泡泡玛特上半年海外营收大增 亚马逊投资Anthropic40亿美元 智界S7正式亮相 在日前举行的华为秋季全场景新品发布会上,华为智选车业务首款轿车智界S7正式亮相,定位高…

华为云云耀云服务器L实例评测|使用华为云耀云服务器L实例的CentOS部署Docker并运行Tomcat应用

目录 前言 步骤1:登录到华为云耀云服务器L实例 步骤2:安装Docker 并验证Docker安装 步骤3:拉取Tomcat镜像并运行Tomcat容器 步骤4:放行8080端口 步骤5:访问tomcat 步骤6:管理Tomcat容器 小结 前言 …

干洗店收银系统、上门洗鞋小程序,干洗店会员管理系统

干洗店收银系统、上门洗鞋小程序,干洗店会员管理系统可以增加洗衣店的优势,让干洗店回本快,通过发行会员卡卡促销回收资金带来效益,减少投资压力。 干洗店管理软件功能介绍 预约上门收衣 智能提醒+员工手机APP抢单AP…

ORACLE 在内存管理机制上的演变和进化

截止目前,计算机内存仍然被认为是我们可以获得的最快速度的物理存储设备。 将频繁访问的数据尽可能地置于内存中,已成为当前各种软件和应用程序提高数据访问性能,减少访问延迟的最为有效的途径。 然而,内存作为关键的计算资源&am…

uni-app:showModal消息提示(确认、取消)

效果 代码 <template><view><button longpress"handleLongPress">点我出现删除消息</button></view> </template><script>export default {data() {return {};},methods: {handleLongPress(e) {//删除设备uni.showModal(…