这里记录一下使用cppcheck
进行C++
代码静态检测的方法和步骤。
本机安装cppcheck
1 | sudo apt-get update && sudo apt-get install cppcheck |
使用cppcheck
来检查代码
新建一个目录,并在目录中加入如下内容的cpp
文件,用于测试静态代码分析工具。
测试代码
1 |
|
这里记录一下使用cppcheck
进行C++
代码静态检测的方法和步骤。
本机安装cppcheck
1 | sudo apt-get update && sudo apt-get install cppcheck |
使用cppcheck
来检查代码
新建一个目录,并在目录中加入如下内容的cpp
文件,用于测试静态代码分析工具。
测试代码
1 | #include <iostream> |
下面的一个例子演示了两个节点之间如何实现零拷贝通讯。
注意,下面测试例子的ROS2
版本为Galactic
。
1 | #include <chrono> |
std::chrono::system_clock
1 |
|
system_clock
是系统范围的时钟。它是可修改的。比如同步网络时间。所以系统的时间差可能不准。
ROS2
的构建系统ament_cmake
是基于CMake
改进而来的。本篇文章我们详细介绍一下ament_cmake
常用的语句。
使用ros2 pkg create <package_name>
可以生成一个功能包的框架。
一个功能包的构建信息将会包含在CMakeLists.txt
和package.xml
这两个文件中。package.xml
文件中包含该功能包的依赖信息,它可以帮助编译工具colcon
确定多个功能包编译的顺序。当我们需要单独编译功能包时必须确保编译的包名必须与package.xml
文件中的一致。
1 | colcon build --packages-select <package_name> |
而CMakeLists.txt
就是我们需要重点关注的。它描述了如何构建功能包。
jenkins
是老牌的CI/CD
工具。下面记录一下在云服务器上的安装过程。
docker
安装jenkins
下面记录了如何在云服务器上安装jenkins
。
新建一个jenkins_docker
文件夹,在文件夹里新建一个data
文件夹。并给data
文件夹读写权限。
1 | chmod -R a+w data/ |
新建一个docker-compose.yml
文件。添加下面的内容:
1 | version: "3.1" |
注意,这里是将data
目录映射到了docker
环境里。
我们使用backward_ros
功能包来快速实现用GDB
调试ROS2
程序。
backward_ros
功能包介绍backward_ros
功能包是对backward-cpp
包的ROS2
封装,以便可以简单快速地使用GDB
工具。
backward-cpp
包的介绍可以查看其仓库:
https://github.com/bombela/backward-cpp
使用backward_ros
功能包实现GDB
调试ROS2
程序只需下面三个步骤:
backward_ros
到package.xml
文件。1 | <depend>backward_ros</depend> |
编译选项有很多,这里列出一些常用的编译选项设置,并说明作用。
C++
版本1 | set(CMAKE_CXX_STANDARD 17) |
可以根据需求设置11, 14, 17, 20等等C++
版本。
1 | add_compile_options(-Wall -Wextra -Wpedantic -Wno-unused-parameter -g) |
告警选项:
告警选项 | 作用描述 |
---|---|
-Wall | 允许发出gcc提供的所有有用的报警信息 |
-Wextra | 对所有合法但值得怀疑的表达式发出警告 |
-Werror | 把告警信息当做错误信息对待 |
-Wpedantic | 允许发出ANSI C标准所列的全部警告信息 |
-w | 关闭所有警告(不推荐使用) |
-Wfatal-errors | 遇到第一个错误就停止,减少查找错误时间 |
我们加上了告警都转成错误后常常会看到下面的错误信息。
1 | error: unused parameter ‘test’ [-Werror=unused-parameter] |