Ubuntu18.04下VScode调试教程

  • 一、调试准备
  • 二、需要创建哪些相关配置文件?
    • 1.创建task.json文件
    • 2.创建launch.json文件
    • 3.创建c_cpp_properties.json文件
    • 4.创建setting.json文件
  • 三、怎么设置这些相关配置文件?
    • 1.设置task.json文件
    • 2.设置launch.json文件
    • 3.设置c_cpp_properties.json文件
    • 4.设置setting.json文件
  • 四、调试方法

一、调试准备

首先是下载vscode以及编译器clang-6.0,具体的操作见我的另外两篇博客
关于vscode与clang的配置
ubuntu下的Vscode部署以及代码上传到码云

二、需要创建哪些相关配置文件?

1.创建task.json文件

首先,我们需要一个task.json文件来告诉Visual Studio Code如何构建C++程序,创建的方法有:
(1)复制粘贴现成的task.json或者整个.vscode文件夹(注意都是隐藏文件夹)
(2)点击Terminal–>Configure Default Build Task
注意此操作,要先选中工作空间中的cpp文件,才会跳出第二张图片的内容

下图列出了预定义的构建任务,选择第二个

还有一步是可选操作,如果用了ros2的colcon build命令就不需要去单独构建C++文件了,但如果是一个单纯的C++工程,就需要:Terminal–>Configure Default Build Task(快捷键ctrl+shift+B)去构建可执行文件。这里不详细展开。

2.创建launch.json文件

直接按F5或者Run–>Add Configuration
再选择C++(GDB/LLDB),选择第一个clang-6.0就好了
launch.json能够配置多个可执行文件,实现同时调试,如果想要在现成的文件里添加新的配置,直接点击界面左下方的蓝色键Add Configuration即可,或者复制粘贴

3.创建c_cpp_properties.json文件

相比于其他插件都是把设置项储存在Visual Studio Code的setting.json文件中,C/C++插件是通过c_cpp_properties.json文件来配置编译器、头文件路径、C++标准等设置项的。

创建方式:
通过Ctrl+Shift+P快捷键打开命令面板,然后输入并执行C/C++:Edit Configuration(JSON)就能创建。

4.创建setting.json文件

setting.json文件用来控制诸多工作项的配置,比如代码自动补全等。
创建方式:
通过Ctrl+Shift+P快捷键打开命令面板,然后输入并执行Preferences: Open Settings(JSON)就能创建。

三、怎么设置这些相关配置文件?

关于这一部分,阅读代码的相关的注释即可

1.设置task.json文件

{"version": "2.0.0","tasks": [// 各任务之间用大括号分割开,大括号之间有逗号隔开。{// 这个任务用colcon工具来编译整个工作目录下的packages// 在修改完代码后启动调试前通常需要先执行此任务。"type": "shell","command": "colcon build  ",  // 此任务要执行的命令(等价于在终端直接输入 colcon build)"group": {"kind": "build","isDefault": true},"problemMatcher": [],"label": "colcon build " // 这是任务名称。},{// 此任务用于安装编译完的包"type": "shell","command": "source ${workspaceFolder}/install/setup.sh",    // 任务要执行的命令"group": {"kind": "build","isDefault": true},"dependsOn": "source", //代表依赖关系,在执行此任务前需要先执行colcon任务。"problemMatcher": [],"label": "setup"        //此任务的名称,在launch.json文件中需要引用此名称。},{"type": "shell","command": "source /opt/ros/dashing/setup.sh",    // 任务要执行的命令"group": {"kind": "build","isDefault": true},"problemMatcher": [],"label": "source"        //此任务的名称,在launch.json文件中需要引用此名称。},// 还可以继续定义其它想要执行的任务(用大括号隔开)。// 。。。]
}

2.设置launch.json文件

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb) Launch_pub_map","type": "cppdbg","request": "launch",// program代表要调试的程序路径(不同路径程序要对应修改)"program": "${workspaceFolder}/install/publish_map/lib/publish_map/pub_map","args": [],"stopAtEntry": false,// 是否在启动时,停在入口处。"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb",// preLaunchTask代表在启动调试前需要执行的命令(该命令在tasks.json文件中定义)"preLaunchTask":  "setup","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]},{"name": "(gdb)sub_map_pub_path","type": "cppdbg","request": "launch",// program代表要调试的程序路径(不同路径程序要对应修改)"program": "${workspaceFolder}/install/publish_map/lib/publish_map/sub_map_pub_path","args": [],"stopAtEntry": false,// 是否在启动时,停在入口处。"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb",// preLaunchTask代表在启动调试前需要执行的命令(该命令在tasks.json文件中定义)"preLaunchTask":  "setup","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]},{"name": "Python: visualize","type": "python","request": "launch","preLaunchTask": "setup",// "program": "${workspaceFolder}/install/map_visualize/lib/map_visualize/get_path","program": "${workspaceFolder}/src/map_visualize/map_visualize/visualize.py","console": "integratedTerminal","stopOnEntry": false,"cwd": "${workspaceFolder}",}]}

3.设置c_cpp_properties.json文件

{"configurations": [{"browse": {"databaseFilename": "","limitSymbolsToIncludedHeaders": true},// 添加C++的头文件目录。如果ros安装在不同的位置,对应的修改第二行路径"includePath": ["${workspaceFolder}/install/**","/opt/ros/dashing/include/**","/usr/include/**","${workspaceFolder}/src/publish_map/include/**"],// 设置C++编译器路径和语言标准,我们采用C++14标准"name": "ROS","intelliSenseMode": "gcc-x64","compilerPath": "/usr/bin/clang-6.0","cStandard": "c11","cppStandard": "c++14"}],"version": 4
}

4.设置setting.json文件

{// 在这里添加python3的包地址,这样在源代码里能自动补全,方便写程序。"python.autoComplete.extraPaths": ["/opt/ros/dashing/lib/python3.6/site-packages","${workspaceFolder}/install/custom_msg/lib/python3.6/site-packages","${workspaceFolder}/install/map_visualize/lib/python3.6/site-packages"],"python.formatting.provider": "yapf",   // 使用yapf自动格式化代码"python.linting.enabled": false,        //禁止lint语法提示(感觉不准)"files.associations": {"istream": "cpp","ostream": "cpp","ratio": "cpp","array": "cpp","functional": "cpp","tuple": "cpp","type_traits": "cpp","utility": "cpp","vector": "cpp","cctype": "cpp","clocale": "cpp","cmath": "cpp","csignal": "cpp","cstdarg": "cpp","cstddef": "cpp","cstdio": "cpp","cstdlib": "cpp","cstring": "cpp","ctime": "cpp","cwchar": "cpp","cwctype": "cpp","atomic": "cpp","strstream": "cpp","*.tcc": "cpp","bitset": "cpp","chrono": "cpp","cinttypes": "cpp","complex": "cpp","condition_variable": "cpp","cstdint": "cpp","deque": "cpp","list": "cpp","unordered_map": "cpp","exception": "cpp","algorithm": "cpp","iterator": "cpp","map": "cpp","memory": "cpp","memory_resource": "cpp","numeric": "cpp","optional": "cpp","random": "cpp","set": "cpp","string": "cpp","string_view": "cpp","system_error": "cpp","fstream": "cpp","future": "cpp","initializer_list": "cpp","iomanip": "cpp","iosfwd": "cpp","iostream": "cpp","limits": "cpp","mutex": "cpp","new": "cpp","shared_mutex": "cpp","sstream": "cpp","stdexcept": "cpp","streambuf": "cpp","thread": "cpp","cfenv": "cpp","typeindex": "cpp","typeinfo": "cpp","*.idl": "cpp","*.ipp": "cpp","*.txx": "cpp","unordered_set": "cpp"},"ros.distro": "dashing"
}

四、调试方法

在我们配置好后,点击左侧的run,可以看到有三个对应的不同的调试选项分别是:
(gdb) Launch_pub_map
(gdb)sub_map_pub_path
Python: visualize
对应着我们launch.json里面的调试名"name":
比如选中第一个 (gdb)sub_map_pub_path 然后按F5


如果想调试另外一个程序,就点击左侧的run,选中第二个 (gdb)sub_map_pub_path然后此时按F5是无效的
要点击左侧的绿色三角形!

最后我们检查一下一共有三个调试进程,在这里进行调试进程的切换:

再看看我们的终端有几个进程:


最后这里会有一个小问题,我每次debug的第一次会失败,然后在生成的终端里source install/setup.sh然后在次debug就可以了,不知道其他同志会不会有这个问题。
大功告成,开始调试。

Ubuntu18.04下VScode调试方法相关推荐

  1. Ubuntu18.04下Azure Kinect DK 调试(SDK源码+ROS)无比详细踩坑教程

    Ubuntu18.04下Azure Kinect DK 调试(SDK源码+ROS) 一.SDK源码下载及安装 1.1 安装lib4a.dev 包 1.2 文件拷贝 1.3 下载官方SDK源码 1.4 ...

  2. slambook2 ch3 Ubuntu18.04下运行和调试

    文章目录 介绍 一.安装Eigen库 二.安装Pangolin 三.bug调试 总结 介绍 根据视觉SLAMs十四讲的讲解,运行课后代码,调bug心得体会. 使用的是Ubuntu18.04虚拟机+vs ...

  3. Ubuntu18.04下安装MySQL

    提示:以下操作均在root权限下进行. # 查看有没有安装MySQL: dpkg -l | grep mysql # 安装MySQL: apt install mysql-server 安装完成之后可 ...

  4. ubuntu18.04下安装中文输入法

    ubuntu18.04下安装中文输入法 windows下使用习惯了某款中文输入法,现在使用Ubuntu系统,也想和在windows下一样使用中文输入法,发现该输入法已经有了Linux版本,果断下载下来 ...

  5. caffe在ubuntu18.04下编译

    <!---title:caffe在ubuntu18.04下编译--> <!---keywords:caffe, build, ubuntu18,--> 原始引用地址:  [ca ...

  6. ubuntu18.04下hadoop安装与集群配置

    ubuntu18.04下hadoop安装与集群配置 hadoop安装_单机/伪分布式配置 环境 创建hadoop用户 更新apt 安装SSH.配置SSH无密码登陆 安装Java环境 安装 Hadoop ...

  7. Ubuntu18.04下解决Qt出现qt.qpa.plugin:Could not load the Qt platform plugin “xcb“问题

    Ubuntu18.04下解决Qt出现qt.qpa.plugin:Could not load the Qt platform plugin "xcb"问题 问题描述 定位问题 解决 ...

  8. Ubuntu18.04下的音频录制和编辑软件Ardour及QjackCtl(jackd gui)

    Ardour 是一个Linux和OSX下的多音轨录制和数字音频编辑软件. 需要配合ALSA或者JACK总线使用. 快速入门 http://brunoruviaro.github.io/ardour4- ...

  9. ubuntu18.04下nvidia-settings无法保存设置

    问题 ubuntu18.04下nvidia-settings无法保存设置 解决方法 打开终端执行 nvidia-settings 点击 Save to X Configuration File 提示 ...

最新文章

  1. 16s扩增子分析注意事项和经验总结Tips
  2. 通信原理包络是什么意思_罗茨鼓风机的应用及原理
  3. 使用搜索栏过滤collectionView(按照首字母)
  4. 数字摄像头测试软件,图像测量软件(Camera Measure)
  5. Socket中常见的几个转换函数(htonl,htons,ntohl,ntohs,inet_addr,inet_ntoa)
  6. vs2010 打开项目卡死问题解决办法
  7. jmeter与jdk的安装
  8. 计算机网络sequence number,计算机网络
  9. 使用ActionSupport验证登录
  10. 智能插座常用的两种通信协议——WIFI和ZigBee
  11. 02-若依权限管理子系统简介(自己了解)
  12. ubuntu扩容教程
  13. Flink 灵魂两百问,这谁顶得住?
  14. win10电脑wifi服务器未响应,win10系统点电脑无线图标没反应的解决方法
  15. Android吃鸡 3dtouch,绝地求生刺激战场3Dtouch怎么用 3Dtouch设置攻略
  16. 面试官:消息队列 MQ/ JMS/ Kafka 有什么区别?
  17. 图像的高频和低频如何区分
  18. 人工智能写作如何应用于法律文书撰
  19. 多多自走棋改动_《多多自走棋》 更新,几大改动来袭,一个改动让玩家无奈!...
  20. 微信公众号开发者接入

热门文章

  1. 经典重在品质 三星入门级一体机经典之作全剖析
  2. ubuntu 20.04用python启动python3
  3. WINCC与S7-PLCSIM连接测试项目问题
  4. MDS100-16-ASEMI工业焊机用大功率整流模块MDS100-16
  5. excel表个人开支明细表
  6. APT攻击、加密方式
  7. 定制和我一样的博客园主题
  8. UML中的组成和聚集
  9. 指纹识别传感器 java_Nmap指纹识别与探测
  10. 【研二下 | 知识学习 | Ing】