🌊

ETロボコンにおける開発環境 - Google Test Adapterとデバッガ

2024/02/18に公開

はじめに

本記事では、ETロボコンでの開発環境で、Visual Studio Codeの拡張機能であるGoogle Test Adapterを導入し、テストを階層構造で表示する等で、テストの実行を実施しやすくし、さらに、テストをデバッグ実行するようになることを目指します。デバッグ実行ができることで、ユニットテストレベルでのバグ調査が楽になります。無暗にログを埋め込むだけのバグ調査から卒業しましょう!

想定読者

  • ETロボコンに参加する開発者
  • C++を用いた開発に携わる者

ETロボコンとは?

そもそも、ETロボコンとは何か?ということですが、ETロボコンは、2002年から開始されたソフトウェア重視のロボットコンテストであり、組込み技術者の育成を目的としています。このコンテストは、その長年にわたる開催と貢献により、経済産業大臣賞を受賞しています。

詳細は、下記を参照してください。
https://www.etrobo.jp/

ETロボコンにおける開発環境

前提として、ETロボコンの開発環境の概要は、以下の通りとなります。

  • WSL上のUbuntuを使用
  • 統合開発環境としてVisual Studio Codeを採用
  • プログラミング言語はC++/C
  • Unityで動作するシミュレータを利用
  • 実機はRaspberry Pi + SPIKE上で動作

これらの環境は、基本的に主催者から提供されます。

概要説明

Google Test Adapter とは

Google Test AdapterはVisual Studio Codeの拡張機能です。C++のユニットテストを階層的に表示し、効率的にテスト実行を行うことが可能になります。このツールを使うことで、テスト管理が容易になり、デバッグプロセスがスムーズに進むと思われます。

導入手順

ここからは、Visual Studio Code上でGoogle Test Adapter を導入し、デバッグ実行するまでの手順を説明します。

前提条件

  • ETロボコンの開発環境が構築されている
  • インターネットにアクセスできる環境
  • Google Test が、下記手順により導入されている

手順概要

以下のような手順になります。

  1. GDB をインストールする
  2. CMakeLists.txt を修正する
  3. Google Test Adapter をインストールする
  4. Google Test Adapterの設定をする
  5. ビルドする
  6. テスト実行する
  7. テストをデバッグ実行する

GDB をインストールする

TERMINAL上で、下記を実行しインストールします。

sudo apt-get install gdb
  • wslのパスワードを聞かれた時は、PCにサインインした時のパスワード等をいれる。

CMakeLists.txt を修正する

test/gtest/CMakeLists.txtに下記の行を追加します。

set(CMAKE_BUILD_TYPE Debug)

全体としては、下記のようになります。

cmake_minimum_required(VERSION 3.14)
project(etrobotest)
 
set(CMAKE_BUILD_TYPE Debug)
 
# GoogleTest requires at least C++14
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
include(FetchContent)
FetchContent_Declare(
 googletest
 URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
)
# For Windows: Prevent overriding the parent project's compiler/linker settings
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
 
enable_testing()
 
include_directories($ENV{HOME}/etrobo/workspace/etrobo2023/app)
 
 
file(GLOB_RECURSE TEST_SOURCES "app/*.cpp")
add_executable(EtRoboTest ${TEST_SOURCES})
 
target_link_libraries(
 EtRoboTest
 GTest::gtest_main
)
 
include(GoogleTest)
gtest_discover_tests(EtRoboTest)

Google Test Adapter をインストールする

Visual Studio Codeの左側のアクティビティバーにあるExtensionsビュー(四角形のアイコン)をクリックします。

検索ボックスにGoogle Test Adapterと入力し、検索結果からGoogle Test Adapterを選択します。

「Google Test Adapter」のInstallボタンをクリックします。

これでGoogle Test Adapterがインストールされます。

成功すると、アクティビティバーにフラスコみたいなアイコンが表示されます。

これで、インストールは完了です。

ビルドする

下記の記事にあるようにビルドします。

ETロボコンにおける開発環境 - GoogleTest
https://zenn.dev/fujiyamaegg/articles/fce8debb7aab98

test/gtest直下で、以下を実行してビルドしてください。

cmake -S . -B build
cmake --build build

あるいは、gtest/test直下に下記のシェルスクリプトを実行してください。

gtest_build.sh

Google Test Adapterの設定をする

VSCodeを開いた時のトップフォルダ配下に.vscodeディレクトリの下にlaunch.jsonを作成します。

launch.jsonに下記を記載する。

{
   "version": "0.2.0",
  "configurations": [
       // ここに起動設定を追加していく
   ]
}
 

configurations の所で、ctrl+spaceキー で、下記のような選択肢が表示されます。

「c/c++: (gdb) Launch」を選択します。

そうすると、以下のように情報が展開されます。

上記の起動ファイルの次の部分を変更します。
program : デバッグしたいプログラムのパスに変更します。下記のように指定します。

       "program": "${workspaceFolder}/workspace/etrobo2023/test/gtest/build/EtRoboTest",

EtRoboTestの部分は、CMakeLists.txtファイルの下記行のものと合わせてください。

add_executable(EtRoboTest ${TEST_SOURCES})

cwd : "${fileDirname}" となっていますが、下記のように変更します。

       "cwd": "${workspaceFolder}/workspace/etrobo2023/test/gtest/build/",

これで、「テスト」(フラスコアイコン)を選択し、「Switch Test Cofiguration」ボタンを押します。


「(gdb) Launch」を選択して、「OK」すると、テストを探し出して、表示してくれます。

テスト実行する

実施したいテストを選択して、実行ボタンを押下すると、選択したテスト配下の試験がすべて実施されます。

Visual Studio Code の OUTPUTにテスト結果が表示されます。

テストをデバッグ実行する

デバッグ実行する場合は、ソースコードの行番号の左側をクリックして、ブレークポイントを設定して、デバッグ実行します。

ブレークポイントに止まりました。ここで、変数の内容を確認したり、ステップ実行などすることができます。

GDBの操作は、、下記のようなサイトを参考にしてください。

Visual Studio Code による GUI デバッグ - ゼロから学ぶ C++
https://rinatz.github.io/cpp-book/debug-vscode/

おわりに

Google Test Adapterを用いることで、Google Testが少しだけ使いやすくなります。また、デバッガを使えるようになることで、テストプロセスの効率化につながり、ETロボコン参加者にとっても、開発速度とコード品質の向上に寄与します。ぜひ、トライしてみてください。

参考

Google Test を使ってみる(その4:VSCode拡張機能編)
https://developer.mamezou-tech.com/blogs/2022/11/20/google-test-04/

Discussion