在CLion中调试ROS2_C++项目

在CLion中调试ROS2_C++项目

环境

  • ROS: Humble
  • Ubuntu: 22.04
  • CLion: 2024.2

准备工作

  • 安装Ninja sudo apt-get install ninja-build
  • 工作区路径为/home/arlo/ros2_ws/,我们将这一文件层级称为workspace-level folder
  • package路径/home/arlo/ros2_ws/src/pkg01_hellowrld_cpp

在终端中构建工作区并生成编译数据库(Build a workspace in terminal and generate a compilation database)

为了能够在 CLion 中打开 ROS2 工作区,我们将使用 CMAKE_EXPORT_COMPILE_COMMANDS 这个CMake 标志生成一个 JSON 编译数据库( JSON compilation database)

命令执行在workspace-level folder

colcon build --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja

构建完成后,ros2_ws\build 包含一个 compile_commands.json 文件

在已经被source后的环境中启动CLion(Launch CLion in the sourced environment)

  1. 在同一个终端,source install/setup.bash
  2. 启动CLion

在CLion中打开工作区

  1. 在CLion中,File->Open选择刚才生成的compile_commands.json
    img1
  2. 选择作为项目打开

改变项目的根目录

默认情况下,CLions 将包含 compile_commands.json 文件的目录视为项目根目录。在例子中,它是 build 目录。在 Project tree中,实际的源文件被标记为 external

为了获得正确的项目结构,我们需要将项目根目录设置为实际的 workspace 目录

  1. 打开Tools->Compilation Database->Change Project Root
    img2
  2. 更改更目录到workspace-level
    img3

如何构建一个package(How to build a package)

为了在 CLion 中构建并启动一个包,我们将为 colcon 构建期间实际执行的 CMake 命令创建一个自定义构建目标,然后为该目标创建自定义应用程序配置

为’colcon build’创建脚本

  1. 来到ros2_ws/log/latest_build/pkg01_helloworld_cpp/,复制command.log里面的命令
    img4
  2. 在src/pkg01_helloworld_cpp/下创建并粘贴命令到cmake_commands.sh,然后修改权限chmod 777 cmake_commands.sh
  3. 修改cmake_commands.sh为以下内容,
    1
    2
    3
    /usr/bin/cmake /home/arlo/ros2_ws/src/pkg01_helloworld_cpp -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja -DCMAKE_INSTALL_PREFIX=/home/arlo/ros2_ws/install/pkg01_helloworld_cpp
    /usr/bin/cmake --build /home/arlo/ros2_ws/build/pkg01_helloworld_cpp -- -j32 -l32
    /usr/bin/cmake --install /home/arlo/ros2_ws/build/pkg01_helloworld_cpp

创建自定义构建目标

  1. 打开Settings->Build, Execution, Deployment->Custom Build Targets 点击+去添加一个新目标
    • 设置工具链为,默认即可
    • 点击build右边的三个点,在弹出的窗口里点击+去添加一个外部工具,选择刚刚创建的cmake_commands.sh
      img5
    • 注意working directory,一定是ros2_ws/build/pkg01_helloworld_cpp,此处存放构建后产生的文件

为自定义构建目标创建run/debug配置

为了能够构建并启动我们为包设置的目标,我们需要创建相应的配置

  1. 在主菜单,点击 Run | Edit Configurations,点击然后选择Custom Build Application ,可执行文件选择ros2_ws/build/pkg01_hellowrold_cpp/hellowrold,此处的可执行文件名应在CMakelist.txt设置
    img6
    img7

开始Debug

  1. 打断点,点击小锤子构建
  2. 构建完成后,点击小虫子开始调试
    img8
  3. 若无法进行断点调试,在CMakelist.txt中加入SET(CMAKE_BUILD_TYPE "Debug")

用CLion构建ros2 工作区

  1. 打开File->Tools->External Tools,点击+添加新的外部工具
    img9
  2. 实参填build --symlink --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja 其他参数如下
    img10
  3. 构建工作区
    img11