【vscode】c++程序的自动编译及调试(环境centos)

news2024/11/20 7:26:15

目录

  • 1.新增配置文件
    • (1)c_cpp_properties.json
    • (2)files.associations
    • (3)tasks.json
    • (4)CMakeLists.txt
  • 2.断点调试

1.新增配置文件

VS Code的配置文件一般是指特定目录下的JSON文件。所谓JSON是一种文本格式,用于轻量化地存储一组{键: 值}信息,诸如编译器的路径、调试器的路径和有关选项等。
我们这里所做的调试配置放在当前工作文件夹下的.vscode子目录中,具有最高优先级,出错了想从头来直接删除里面的配置文件即可。
这里新增的配置文件有:

(1)c_cpp_properties.json

这里是cpp的配置选项,主要用于配置头文件路径:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/include/c++/8",
                "/usr/local/opencv/include/opencv4/opencv2/",
                "/usr/local/opencv/include/opencv4"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

(2)files.associations

将某种特殊文件类型关联到vscode已支持的文件类型

{
    "files.associations": {
        "*.cu": "cuda-cpp",
        "*.cpp": "cpp",
        "deque": "cpp",
        "string": "cpp",
        "vector": "cpp",
        "*.tcc": "cpp",
        "__hash_table": "cpp",
        "__split_buffer": "cpp",
        "__tree": "cpp",
        "array": "cpp",
        "bitset": "cpp",
        "initializer_list": "cpp",
        "iterator": "cpp",
        "map": "cpp",
        "queue": "cpp",
        "random": "cpp",
        "set": "cpp",
        "stack": "cpp",
        "string_view": "cpp",
        "unordered_map": "cpp",
        "utility": "cpp",
        "__atomic": "cpp",
        "__functional_base": "cpp",
        "__functional_base_03": "cpp",
        "__tuple": "cpp",
        "algorithm": "cpp",
        "chrono": "cpp",
        "type_traits": "cpp",
        "filesystem": "cpp",
        "functional": "cpp",
        "limits": "cpp",
        "memory": "cpp",
        "ratio": "cpp",
        "tuple": "cpp",
        "istream": "cpp",
        "ostream": "cpp"
    }
}

(3)tasks.json

编译用,调试程序将在编译好的debug程序上进行调试
这里其实是执行了make -j6

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "command": "make -j6"
        },
       
    ]
}

(4)CMakeLists.txt

编写完后使用make命令产生makefile,供(3)进行make编译.
这里特别注意:#添加-g 参数以支持带有gdb调试信息,否则无法下断点

#设置CMAKE最`在这里插入代码片`低版本
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.3)
MESSAGE(STATUS "start!")
#设置项目名称
SET(PROJECT_NAME OpenCV_test)
#这里添加刚刚安装的opencv的目录,需要包含OpenCVConfig.cmake
SET(OpenCV_DIR /usr/local/opencv/lib64/cmake/opencv4)
#建立项目
PROJECT(${PROJECT_NAME})
#寻找OpenCV库
FIND_PACKAGE(OpenCV REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
#打印调试信息
MESSAGE(STATUS "Project: ${PROJECT_NAME}")
MESSAGE(STATUS "OpenCV library status:")
MESSAGE(STATUS "    version: ${OpenCV_VERSION}")
MESSAGE(STATUS "    libraries: ${OpenCV_LIBS}")
MESSAGE(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")

#添加-g 参数以支持带有gdb调试信息
set(CMAKE_CXX_FLAGS "-g")
set(CMAKE_C_FLAGS "-g")

#获取代码,在项目中,将所有代码都放在src文件夹中
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
MESSAGE(STATUS "Src file: ${DIR_SRCS}")
#编译可执行程序
ADD_EXECUTABLE(${PROJECT_NAME} ${DIR_SRCS})
#添加链接库
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${OpenCV_LIBS})

(5)launch.json
调试配置文件,用于指定调试用的环境等信息

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "program-debug",
            "type": "cppdbg",
            "request": "launch",
            //待调试的程序
            "program": "${workspaceFolder}/OpenCV_test",
            "args": [],
            "stopAtEntry": false,
            //工作目录,用于寻找文件及图片等
            "cwd": "${workspaceFolder}",
            //配置的环境变量,相当于使用一次export命令,这里没有实际使用
            "environment": [
                {"name": "workdir", "value": "workspace"}
            ],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb",
            "setupCommands": [
                {
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            //每次进行调试前先进行编译操作:
            "preLaunchTask": "build"
        }
    ]
}

对于"miDebuggerPath",需要安装调试工具gdb,并填写调试路径:

安装调试工具:

 yum install gdb

查看gdb安装的所在路径:

rpm -ql gdb

上述工作准备完后,有:
在这里插入图片描述

2.断点调试

在cpp文件内加断点:
在这里插入图片描述
点选调试按钮,选择在这里插入图片描述
在这里插入图片描述
选择上图蓝色选项,执行编译并调试。
在这里插入图片描述
断点进入成功。

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

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

相关文章

LCF-ATEPC(2020 Elsevier)面向中文的方面级提取和分类

论文题目(Title):A Multi-task Learning Model for Chinese-oriented Aspect Polarity Classification and Aspect Term Extraction (面向中文的方面极性分类和方面项提取的多任务学习模型) 研究问题(Question&#…

适用于 Windows 10/11 电脑 的 5 大好用的离线录屏软件

屏幕录制应用程序可以数字记录出现在任何设备或 PC 屏幕上的内容,并同时以高清流式传输音频和视频。 因此,他们帮助创建营销视频、跟踪客户行为、设计产品演示、监控员工活动、录制教育内容、网络研讨会内容和业务会议内容。 现在您已经意识到屏幕录…

VS系列多通道振弦传感器无线采发仪的数据发送说明

每次设备启动后会将采集到的传感器数据进行内部存储,并在设置好的时间间隔将数据发送出去,通过修改“数据发送方式”参数,监测数据可由数据接口输出也可经由无线网络发送。在发送监测数据时,可通过修改“数据包协议”参数来设置所…

函数和数组习题

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C语言基础习题】 文章目录知识点习题2.实现一个整型数组的冒泡排序(编程体)。3.编程题:创建一个整型…

springcloud,springboot各个版本之间的关系

1 版本关系 在实际的开发中如果要自己搭建矿建,发现springcloud,springboot的版本可能是首先需要确定的,那么他们之间的关系是什么呢?看官网,地址 Spring Cloud 左侧是cloud的版本,右侧是对应的文档&…

Splunk Window 客户端迁移

最近客户的Splunk deployment server 要迁移,伴随着client 端的配置也要相应的调整: 先看一下架构: 看一下主要的参数: Summary of key terminology Heres a recap of the key definitions: TermMeaningdeployment serverA Splunk Enterprise instance that acts as a c…

Java中的日期与时间

Java中的日期与时间\huge{Java中的日期与时间}Java中的日期与时间 JavaJavaJava中有很多类是专门用于描述日期类的。 Date类 DateDateDate类:用于表示当前所在系统的日期时间信息。 Date类的构造器 示例: Date d new Date(); System.out.println(d);…

12月第3周榜单丨B站UP主排行榜(飞瓜数据B站)发布!

飞瓜轻数发布2022年12月12日-12月18日飞瓜数据UP主排行榜(B站平台),通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况,为用户提供B站号综合价值的数据参考,根据UP主成长情况用户能够快速找到运营能力强的…

Redis高级篇

redis的四个问题: 1.Redis是基于内存存储,服务重启可能会丢失数据; 2.并发能力问题:单节点Redis能力虽然不错,但也无法满足如618这种高并发的场景(618并发 数量达到数十万甚至上百万); 3.如果reids宕机,服务不可用,则需要一种自动的故障恢复手段; 4.存…

自学Python可以找到工作吗?

自学Python可以找到工作吗?自学Python找工作主要看自己的学习能力,自学能力很强学完并精通当然可以工作,不过对于大多数人而言一般都挺难,学习不成系统,遇到问题没人解决很容易放弃半途而废。 学Python能干很多很多事…

NodeJS安装-Vue模块化项目构建

NodeJS安装-Vue模块化项目构建 一、环境准备(NodeJS安装) 1. 安装NodeJS 官网自行下载,并安装 2. 配置npm的全局安装路径 npm config set prefix "D:\soft_install\dev\qianduan_dir\nodejs"3. 切换npm的淘宝镜像&#xff0c…

C++11标准模板(STL)- 算法(std::is_permutation)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 判断一个序列是否为另一个…

《记忆力心理学》5个方法 让你过目不忘

《记忆力心理学》 关于作者 赫尔曼•艾宾浩斯&#xff0c;西方心理学泰斗级人物&#xff0c;生活在19世纪的德国心理学家。他是最早用实验的方法对记忆进行量化研究的 人&#xff0c;最受人瞩目的贡献&#xff0c;就是发现了记忆保持曲线。 关于本书 这本书可以看作是记忆心…

全国职业院校技能大赛网络搭建与应用赛项——云平台底层的一些命令

1.列出运行的虚拟机 virsh list 2.列出所有的虚拟机virsh list --all 3.网络信息表&#xff08;20分&#xff09; 显示网络名及所在的vlan idopenstack network show Network10 -c name -c provider:segmentation_id openstack network show Network20 -c name -c provider:s…

学习->C++篇十九:四种智能指针及其实现

目录 为什么需要智能指针&#xff1f; 什么是内存泄露&#xff1f; 如何避免内存泄露&#xff1f; 什么是RAII&#xff1f; RAII有什么用&#xff1f; 智能指针的原理是什么&#xff1f; C的智能指针有哪些&#xff1f; auto_ptr unique_ptr shared_ptr weak_ptr 为什…

【第十五章 分库分表(垂直拆分,水平拆分),MyCat】

第十五章 分库分表&#xff08;垂直拆分&#xff0c;水平拆分&#xff09;&#xff0c;MyCat 1.分库分表&#xff1a; &#xff08;1&#xff09;介绍&#xff1a; ①采用单数据库进行数据存储&#xff0c;存在以下性能瓶颈&#xff1a; A.IO瓶颈&#xff1a;热点数据太多&…

第二证券|A股传奇董秘变身老板,公司IPO过会

A股传奇董秘何愿平卷土重来&#xff0c;但这次不是以董秘的身份。 12月20日&#xff0c;碧兴科技IPO获科创板上市委会议经过&#xff0c;其实控人正是A股曾经的传奇董秘何愿平。作为前碧水源董秘&#xff0c;何愿平曾多年连任A股身家最贵董秘。 二次创业过会 招股书显现&…

离散化算法

目录 算法原理 算法模板 1&#xff09;手工编码 2&#xff09;c用STL函数实现离散化 附录&#xff1a; 算法原理 给出一列数字&#xff0c;在有些情况下&#xff0c;这些数字的值得绝对大小不重要&#xff0c;而相对大小很重要。例如&#xff0c;对一个班级学生的成绩进行…

图片加水印怎么弄?这些图片加水印方法分享给你

相信很多小伙伴平常会喜欢将自己拍摄的作品上传到社交平台上与他人分享吧。然而有时会遇到自己辛苦拍摄的视频或者图片被他人盗用&#xff0c;甚至是获利的情况。其实想要避免自己的作品被他人盗用&#xff0c;我们可以在作品上面添加专属自己的水印&#xff0c;不仅可以给作品…

Java学生成绩管理系统

1、内容要求 编写一个学生成绩管理系统。学生的属性包括学号、姓名、年龄等。每个学生要学习若干课程&#xff0c;每门课程有平时成绩、期中考试成绩、期末考试成绩以及总评成绩&#xff0c;其中总评成绩平时成绩*30%期中成绩*30%期末成绩*40%。请先设计合理的类存放这些信息&a…