vscode调试文件(C++,ROS和cmake文件)

VsCode调试文件

参考文档:

code.visualstudio.com/docs/editor/variables-reference

code.visualstudio.com/docs/editor/tasks

主要修改task.json下的"args"、launch.json中的"program",“args”

注意task.json中的label以及launch.json中的preLaunchTask对应的要保持一致

几个比较常用的:

  1. ${workspaceFoler} vscode打开的文件夹路径
  2. ${file} 当前打开的文件路径
  3. ${fileDirname} 当前打开的文件的路径(不包括文件名)

首先,注意一点:

g++进行调试时需要先运行一遍,再开启调试模式,就可以正常进行了

tasks.json文件:

这里的type可以是cppbuild,也可以是shell,是shell的话要按照cmake的规则配置

{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C++: g++-9 生成活动文件","command": "/usr/bin/g++-9","args": ["-fdiagnostics-color=always","-g","${workspaceFolder}/src/*.cpp","-I","${workspaceFolder}/include","-o","${workspaceFolder}/build/debug_test"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}]}

shell版本(cmake版本):

{"version": "2.0.0",//这里相当于是cd build文件夹"options":{"cwd":"${workspaceFolder}/build"},"tasks": [//执行cmake ..命令{"type": "shell","label":"cmake","command":"cmake","args":[".."]},//执行make命令{"label":"make","group":{"kind":"build","isDefault":true},"command":"make","args":[]},//这个label做了两件事cmake .. make{"label":"Build","dependsOrder":"sequence", //按列出的顺序执行任务依赖项"dependsOn":["cmake","make"]}]}

launch.json文件:(原始)

{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": []
}

launch.json文件:(现在)

这个设置同样适用于cppbuild的task.json文件和shell版本的cmake task.json文案金

重要的几个设置:"program"和"preLaunchTask"这两个参数很重要

{"version":"0.2.0","configurations":[{"name":"g++-8 - 生成可调试活动文件","type":"cppdbg","request":"launch","program":"${workspaceFolder}/build/debug_test", //这里的debug_test是可执行文件,是需要提前编译好放在这个目录下的,如果没有这个可执行文件,会报错,需要通过g++ src/function.cpp src/main.cpp -Iinclude -o build/debug_test这个命令生成可执行文件"args":["hello_debug!"],"stopAtEntry":false,"cwd":"${workspaceFolder}","environment":[],"externalConsole":false,"MIMode":"gdb",//下面这些还没研究明白是干啥的,还不能用/*"setupComands":[{"description":"为gdb启动整齐打印","text":"-enable-pretty-printing","ignoreFailures":true}]*///下面的preLaunchTask参数要么是Build,要么是cppbuild,与上面的tasks.json中的type参数保持一致"preLaunchTask":"Build","miDebuggerPath":"/usr/bin/gdb"}]
}

CMakeLists.txt文件的简写

cmake_minimum_required(VERSION 3.0)project(HELLOWORLD)# 指定include目录
include_directories(${CMAKE_SOURCE_DIR}/include)# 指定编写文件所需要的C++的一些参数
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O2 -Wall")# 生成可以被调试的可执行文件
set(CMAKE_BUILD_TYPE Debug)# 指定要执行
add_executable(helloWorld_cmake helloWorld.cpp)

文件目录:

请添加图片描述

f5:调试模式

f10:单步越过,下一步

f11:单步进入

C++文件调试

/usr/bin/c++   -I/usr/include/eigen3  -O3 -g   -o CMakeFiles/eigenMatrix.dir/eigenMatrix /home/gzc/slamBook/slambook2/ch3/src/useEigen/eigenMat
rix.cpp 

-I 后面跟include的目录

-O3 是进行代码优化

-g 表示的是生成可以进行gdb调试信息的可执行文件

-o 后面跟要生成的可执行文件

-c 只编译不链接(需要去掉)

ros调试

不用vscode的ros调试

先初始化功能包:

mkdir -p ~/catkin_ws/src	创建一个子目录src,上一级目录是工作空间名称'catkin_ws'
cd ~/catkin_ws/				进入创建的工作空间目录
catkin_make					对创建的工作空间进行编译
cd ~/catkin_ws/src								重新打开终端,可以使用此命令进入src目录
cd src											已经位于工作空间目录,可以使用此命令进入src目录
catkin_create_pkg test01 std_msgs rospy roscpp	创建一个名为test01的新功能包

调试已有的cpp文件配上cmakelists.txt时:

catkin_make --directory 跟上自己的目录(eg:home/gzc/catkin_ws) -DCMAKE_BUILD_TYPE=Debug

这里不需要xml文件,但是使用ros创建新的功能包时需要xml文件

用vscode调试ros

安装好ros插件以后,进行调试的时候,在.vscode中一共就两个文件分别是c_cpp_properties.json和settings.json文件:

同时,要初始化时下面的输出正常,才可以创建功能包,eg:

请添加图片描述

并且需要从0开始搭建ros项目才能用,catkin_make本质上还是使用了cmake指令,只不过是将shell脚本封装起来而已,直接用catkin_make eg:

catkin_make --directory 跟上自己的目录(eg:home/gzc/catkin_ws) -DCMAKE_BUILD_TYPE=Debug

c_cpp_properties.json

{"configurations": [{"browse": {"databaseFilename": "${default}","limitSymbolsToIncludedHeaders": false},"includePath": ["/opt/ros/noetic/include/**","/usr/include/**"],"name": "ROS","intelliSenseMode": "gcc-x64","compilerPath": "/usr/bin/gcc","cStandard": "gnu11","cppStandard": "c++14"}],"version": 4
}

settings.json

{// 这里的配置非常关键,配置的是cmake中看哪个cmakelist.txt文件"cmake.sourceDirectory": "/home/gzc/fastlioQN_ws/src",//下面这两个是为了使用ctrl+shift+b的时候有弹窗,可以选择catkin_make的选项使用的"python.autoComplete.extraPaths": ["/home/gzc/.local/lib/python3.8/site-packages","/home/gzc/livox_driver_ws/devel/lib/python3/dist-packages","/opt/ros/noetic/lib/python3/dist-packages"],"python.analysis.extraPaths": ["/home/gzc/.local/lib/python3.8/site-packages","/home/gzc/livox_driver_ws/devel/lib/python3/dist-packages","/opt/ros/noetic/lib/python3/dist-packages"]
}

tasks.json

{"version": "2.0.0","tasks": [{"type": "catkin_make","args": ["--directory","这里写工作空间的目录,即src的上一层目录","-DCMAKE_BUILD_TYPE=Debug"],"problemMatcher": ["$catkin-gcc"],"group": "build","label": "catkin_make: build"}]
}

子工程的cmakelist.txt文件

来自高博的ch3目录下:

cmake_minimum_required(VERSION 2.8)
project(chapter3)set(CMAKE_CXX_FLAGS "-std=c++11")# 加入各子工程
add_subdirectory(useEigen)
add_subdirectory(useGeometry)
add_subdirectory(visualizeGeometry)
add_subdirectory(examples)

gdb调试

  • GDB(GNU Debugger)是一个用来调试C/C++程序的功能强大的调试器,是Linux系统开发C/C++最常用的调试器
  • 程序员可以使用GDB来跟踪程序中的错误,从而减少程序员的工作量。
  • Linux 开发C/C++ 一定要熟悉 GDB
  • VSCode是通过调用GDB调试器来实现C/C++的调试工作的;

调试gdb实战教程:https://www.bilibili.com/video/BV1fy4y1b7TC?p=11&vd_source=ecf9c592d76c9ec37dd88ab19f5eb828

g++ -g a.cpp -o a_yes_g

生成的a_yes_g,是可以进行调试的

## 以下命令后括号内为命令的简化使用,比如run(r),直接输入命令 r 就代表命令run
$(gdb)help(h)        # 查看命令帮助,具体命令查询在gdb中输入help + 命令 $(gdb)run(r)         # 重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件)$(gdb)start          # 单步执行,运行程序,停在第一行执行语句$(gdb)list(l)        # 查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数)$(gdb)set            # 设置变量的值$(gdb)next(n)        # 单步调试(逐过程,函数直接执行)$(gdb)step(s)        # 单步调试(逐语句:跳入自定义函数内部执行)$(gdb)backtrace(bt)  # 查看函数的调用的栈帧和层级关系$(gdb)frame(f)       # 切换函数的栈帧$(gdb)info(i)        # 查看函数内部局部变量的数值$(gdb)finish         # 结束当前函数,返回到函数调用点$(gdb)continue(c)    # 继续运行$(gdb)print(p)       # 打印值及地址$(gdb)quit(q)        # 退出gdb$(gdb)break+num(b)                 # 在第num行设置断点$(gdb)info breakpoints             # 查看当前设置的所有断点$(gdb)delete breakpoints num(d)    # 删除第num个断点$(gdb)display                      # 追踪查看具体变量值$(gdb)undisplay                    # 取消追踪观察变量$(gdb)watch                        # 被设置观察点的变量发生修改时,打印显示$(gdb)i watch                      # 显示观察点$(gdb)enable breakpoints           # 启用断点$(gdb)disable breakpoints          # 禁用断点$(gdb)x                            # 查看内存x/20xw 显示20个单元,16进制,4字节每单元$(gdb)run argv[1] argv[2]          # 调试时命令行传参$(gdb)set follow-fork-mode child   # Makefile项目管理:选择跟踪父子进程(fork()

一些bug

请添加图片描述

这个是launch.json文件没有调试好

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

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

相关文章

Python程序设计 元组和集合

教学案例七 元组和集合 1. 根据年月日计算周几 根据输入的年号、月号、日号,计算是周几(中文、英文) 蔡勒公式 通过蔡勒(Zeller)公式可计算星期几 w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六 c&…

【苍穹外卖】Springboot中快速使用mybatis插件-PageHelper

目录 Springboot中快速使用mybatis插件-PageHelper1. 导入Maven坐标2. 拦截查询方法3. 编写查询的方法和mapper接口4. 配置&#xff1a;扫描Mapper.xml的映射文件路径5. 版本说明 Springboot中快速使用mybatis插件-PageHelper 1. 导入Maven坐标 <dependency><groupI…

MyBatis Dynamic SQL基本使用

MyBatis Dynamic SQL基本使用 一、概念二、特性Hamcrest是什么 三、MyBatis Dynamic SQL 快速入门3.1 环境准备3.2 定义表和列3.3 创建 MyBatis3 映射器3.4 使用 MyBatis3 执行 SQL 四、数据库对象表示4.1 表或视图表示4.2 表别名4.3 列表示 五、Where 子句支持5.1 简单的 wher…

RIP最短路实验(思科)

华为设备参考&#xff1a; 一&#xff0c;技术简介 RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;是一种基于距离矢量的内部网关协议&#xff0c;它根据跳数来度量路由开销并进行路由选择。RIP是最典型的距离矢量路由协议&#xff0c;常…

多高的学历才能轻松找到工作?这个热点有点扯吧~

先来唠唠 昨天刷脉脉的时候&#xff0c;热榜第一的内容吸引了我&#xff1a;多高的学历才能轻松找到工作&#xff1f; 现在这行情&#xff0c;不管多高得学历都很难说能轻松找到工作吧~ 评论区也有不少小伙伴发表自己的见解&#xff0c;比如&#xff1a; 学历固然是非常重要…

【QT学习】8.qt事件处理机制

1.qt事件处理机制 事件处理&#xff1a; 当用户移动鼠标的时候 &#xff0c;创建一个 鼠标移动事件对象 然后把这个对象放到 事件队列里面去&#xff0c;事件管理器 从队列中 取出事件&#xff0c;然后 调用其对应的事件处理函数。 多态机制&#xff1a; &#x…

2024妈妈杯数学建模思路A题思路汇总分析 MathorCup建模思路分享

C题&#xff1a;移动通信网络中PCI规划问题 &#xff08;完整版内容放在文末了&#xff09; 2024MathorCup A题完整思路完整数据可执行代码后续高质量成品论文 l 难度评分: 3.5/5 l 开放度评分: 3/5 l 适合专业: 通信工程、计算机科学、电子工程 l 主要算法: 图论算法、…

route路由命令、ip route命令、default默认路由(0.0.0.0 )

文章目录 概述3. route语法3.1 查看路由表3.1 参数解释 3.2 添加路由记录3.2.1 添加到达单个目标主机的路由3.2.2 添加到达目标网络的路由3.2.3 添加默认路由 3.3 删除路由记录 4. ip route4.1 查看路由4.1.1 不带条件4.1.2 带条件4.1.3 字段解释4.1.3 字段解释 4.2 添加路由4.…

sublime text的json快捷键

系统 macos 配置 sublime Text->Settings->Key Bindings 效果 可以看到&#xff0c;按&#xff1a;shiftcommandp&#xff0c;会出现快捷键窗口&#xff0c;打pretty&#xff0c;会出现Format JSON&#xff0c;最右侧显示⌘J&#xff0c;说明只需要macos的⌘和J同时按…

Midjourney指南 - 生成高分辨率图片(内容已更新至V5)

Midjourney 首先为每个作业生成一个低分辨率图片网格(2x2)。你可以在选择其中任一图片&#xff0c;使用 Midjourney upscaler 来增加尺寸并添加更多细节。有多种可用于放大图像的放大模型。 每个图像网格下方的按钮用于放大所选图像。U1 U2 U3 U4 注&#xff1a;upscaler 以下…

高精度PWM脉宽调制信号转模拟信号隔离变送器1Hz-10KHz转0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA

主要特性: >>精度等级&#xff1a;0.1级。产品出厂前已检验校正&#xff0c;用户可以直接使用 >>辅助电源&#xff1a;8-32V 宽范围供电 >>PWM脉宽调制信号输入: 1Hz~10KHz >>输出标准信号&#xff1a;0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等&…

ts封装axios遇到的问题

在使用ts封装axios时&#xff0c;这里总是有一个报错&#xff0c;经过一顿搜索&#xff0c;发现错误原因&#xff1a;在TypeScript中&#xff0c;函数的参数类型和返回类型是不等价的&#xff0c;因此导致类型不匹配。 解决方法&#xff1a;将 AxiosRequestConfig 改成 Interna…

物理机安装centos7并配置基本环境,网络配置,docker配置

1.首先下载镜像Download 2.下载UltraISO 安装docker 第1步&#xff1a;卸载当前版本docker yum erase docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \do…

前端和设计师 结果 差异化的原因

记得很久之前与我同住的室友经常加班到半夜三更才回家&#xff0c;我很是不解。后来闲聊才得知她们公司的设计师待前端开发完毕之后需要一点点的对稿走查&#xff0c;非常浪费时间。而且设计这边不但需要标注好给开发&#xff0c;然而开发照着做完依然存在诸多问题。 我也曾对接…

关于赚钱上面的金句启发,一共12项100多条,值得收藏!

注意一&#xff1a;个人成长与自我实现 币圈有个词叫不要"mid curve"&#xff0c;意思是在最傻和最聪明的人都能赚到钱&#xff0c;不要做中间那部分人。为什么会经常出现不配赚这么多的钱的感觉&#xff0c;主要还是见识少&#xff0c;当你亲眼见过一年赚上千万一个…

基于数据库现有表导出为设计文档

1.查询 SELECTCOLUMN_NAME 字段名,COLUMN_COMMENT 字段描述,COLUMN_TYPE 字段类型,false as 是否为主键 FROMINFORMATION_SCHEMA.COLUMNS wheretable_NAME region -- 表名2.查询结果 3.导出为excel

测绘管理与法律法规 | 测绘资质分类分级标准 | 学习笔记

目录 1. 申请条件 2.审批程序 3.专业技术人员的特殊规定 1. 申请条件 法人资格&#xff1a;申请单位必须具有法人资格。 专业技术人员&#xff1a;需拥有与测绘活动相适应的测绘专业技术人员和相关专业技术人员。 技术装备&#xff1a;具备与测绘活动相适应的技术装备和设…

数仓建模—数据架构

数仓—数据架构 为了在企业决策中使用数据,数据必须经过整个数据平台的各个阶段。整个过程是什么样子的,从开始到结束?原始形式的数据是如何转化为可导致商业决策的见解的?这些问题可以通过数据架构来回答。 数据架构是指记录组织所有数据资产的模型、规则和标准。它映射…

sql-labs靶场的搭建

1.下载一个sql-labs GitHub - Audi-1/sqli-labs: SQLI labs to test error based, Blind boolean based, Time based. 2.下载 phpstudy(小皮&#xff09; https://www.xp.cn/download.htmlhttps://www.xp.cn/download.html 3. 4. 5. 6. 7.http://127.0.0.1/sqli-labs…

Qt 窗⼝

Qt 窗⼝ 菜单栏创建菜单栏在菜单栏中添加菜单创建菜单项在菜单项之间添加分割线综合⽰例 ⼯具栏创建⼯具栏设置停靠位置设置浮动属性设置移动属性综合⽰例状态栏状态栏的创建在状态栏中显⽰实时消息在状态栏中显⽰永久消息 浮动窗⼝浮动窗⼝的创建设置停靠的位置 对话框对话框介…