赞
踩
通过使用 GCC C++ 编译器 (g++) 和 GDB 调试器,在 VS Code 中编译和调试一个简单的C++程序。
其中,GCC 代表 GNU 编译器集合;GDB 是 GNU 调试器。
三个关键文件介绍:
tasks.json
:compiler build settingslaunch.json
:debugger settingsc_cpp_properties.json
:compiler path and IntelliSense settingstasks.json(run helloworld.cpp)
1.打开cpp文件,使其成为活动文件。
2.按编辑器右上角的播放按钮。
3.生成task文件
从系统上检测到的编译器列表中选择 g++ 生成和调试活动文件(g++ build and debug active file)。
4.此时在.vscode文件夹下面,会产生类似于下面的 JSON:tasks.json
{ "tasks": [ { "type": "cppbuild", "label": "C/C++: g++ 生成活动文件", // 在任务列表中看到的内容,可以任意命名 "command": "/usr/bin/g++", // 指定要运行的程序(命令),即 g++ // 此任务告诉 g++ 获取活动文件 // 对其进行编译,然后在当前目录中创建一个与活动文件同名 // 但没有扩展名的可执行文件 // 其实该部分参数就是g++编译器对应的参数设置 "args": // g++ helloworld.cpp -o helloworld [ "-fdiagnostics-color=always", "-g", "${file}", // 要编译的cpp文件,可改为"${workspaceFolder}/*.cpp",则编译所有cpp文件 "-o", "${fileDirname}/${fileBasenameNoExtension}" // 输出名字 ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": "build", "detail": "调试器生成的任务。" // 在任务列表中对任务进行描述,建议重命名此值,以将其与类似任务区分开来。 } ], "version": "2.0.0" }
launch.json(Debug helloworld.cpp)
该部分主要有两个:launch.json(Debug helloworld.cpp)
生成launch文件方法:点击设置,再次选择 g++ 生成和调试活动文件即可产生该文件,或者按下图创建launch文件,然后点右下角添加配置,选第一个C/C++:(gdb)启动
然后会创建一个文件,如下所示:launch.json
一般需要配置:program、args和cwd
常见变量:
{ "version": "0.2.0", "configurations": [ { "name": "(gdb) 启动", "type": "cppdbg", "request": "launch", "program": "输入程序名称,例如 ${workspaceFolder}/a.out", // 指定要调试的程序,很关键! "args": [], // 程序运行时,传递给程序的参数!比如:["./ubuntu.png"] "stopAtEntry": false, // 目标开头处是否停止,一般false "cwd": "${fileDirname}", // 目标的工作目录,相当于在终端里哪个路径位置,运行的程序 "environment": [], "externalConsole": false, // 是否在外部终端显示输出 "MIMode": "gdb", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "将反汇编风格设置为 Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ], "preLaunchTask": "C/C++: g++ build active file" } ] }
如果想要更好控制 C/C++ extension,可以创建c_cpp_properties.json文件,去更改编译路径、头文件路径、C++标准等设置。
打开方式:
按Ctrl+Shift+P,输入 C/C++: Edit Configurations,可以在json文件修改,也可使用ui界面编辑
{
"configurations": [
{
"name": "Linux",
"includePath": ["${workspaceFolder}/**"], // 头文件路径
"defines": [],
"compilerPath": "/usr/bin/gcc", // 编译器路径
"cStandard": "c11", // c 标准
"cppStandard": "c++17", // c++ 标准
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
整体流程
在使用CMake Tools 扩展插件之前,先通过对其进行配置,使其了解电脑上的编译器。首先需要查找kits,kit用于生成项目的编译器、链接器和其他工具。步骤:
共有四种方式:Debug, Release, MinRelSize, and RelWithDebInfo,一般常用前两个。
要选择variant,打开命令面板 (Ctrl+Shift+P) 运行 CMake:Select Variant 命令。
选择具体程序编译方式
打开(Ctrl+Shift+P)命令行,运行CMake: Configure,配置整个project,生成build文件。
程序运行可以是运行模式,也可以是debug模式。
imageBasics ubuntu.png
,imageBasics是可执行文件、ubuntu.png为输入参数)进行修改即可。一般为:"program": "${workspaceFolder}/build/helloworld", // 指定要调试的程序,很关键!
"args": [], // 程序运行时,传递给程序的参数!比如:["./ubuntu.png"]
"cwd": "${workspaceFolder}", // 目标的工作目录
// 删除 "preLaunchTask": "C/C++: g++ build active file"
preLaunchTask
删除。调试方式可以直接按F5或者点运行-启动调试,或者打开命令面板 (Ctrl+Shift+P) 并运行 CMake:Debug
注意:不要直接点底部的蜘蛛和播放按钮进行调试和运行,从那里好像与launch文件就无关了。
启动roscore:通过按Ctrl + Shift + P,输入ros:start core启动roscore。
快捷键 ctrl + shift + B 调用编译,选择:catkin_make:build,生成编译文件并编译所有代码
运行节点:通过按Ctrl + Shift + P,输入ros:run a rose executable,依次输入对应的package及节点、参数。或者直接在终端rosrun … …
在launch.json文件中,在右下角选择添加配置
,然后选择ROS:Launch
然后在target中,输入要运行的launch节点。
按F5进入调试
注意需要在cmakelist中设置为debug模式,不然代码进行了不同等级的优化后,不利于观察每一步的输出。set(CMAKE_BUILD_TYPE "Debug")
{
"configurations": [
{
"name": "ROS: Launch",
"type": "ros",
"request": "launch",
"target": "/home/th/ws/src/fusion/launch/fusion.launch"
}
]
}
该部分的步骤和单个文件一样(kit-variant-Configure-build-F5调试),最后调试的时候,需要在launch文件选择好需要执行的文件。
《slam14讲》ch5中,有三个子cmake工程,一个主工程,
对其进行编译之后,会在build文件夹下,每个不同分类文件夹下生成可执行文件。
当我们需要对其中某个进行调试的时候,只需要修改launch文件中以下项目即可:
imageBasics
文件夹下undistortImage
可执行文件为例:// ${workspaceFolder} --- the path of the folder opened in VS Code
"program": "${workspaceFolder}/build/imageBasics/undistortImage", // 可执行文件位置以及名字
"args": [], // 传入参数
"cwd": "${workspaceFolder}/imageBasics", // 目标的工作目录
imageBasics
文件夹下imageBasics
可执行文件为例: "program": "${workspaceFolder}/build/imageBasics/imageBasics", // 可执行文件位置以及名字
"args":["${workspaceFolder}/imageBasics/ubuntu.png"], // 传入参数
"cwd": "${workspaceFolder}/imageBasics", // 目标的工作目录
最好的教程还是在官网,上述仅是我个人了理解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。