ETロボコンにおける開発環境 - Google Test Adapterとデバッガ
はじめに
本記事では、ETロボコンでの開発環境で、Visual Studio Codeの拡張機能であるGoogle Test Adapterを導入し、テストを階層構造で表示する等で、テストの実行を実施しやすくし、さらに、テストをデバッグ実行するようになることを目指します。デバッグ実行ができることで、ユニットテストレベルでのバグ調査が楽になります。無暗にログを埋め込むだけのバグ調査から卒業しましょう!
想定読者
- ETロボコンに参加する開発者
- C++を用いた開発に携わる者
ETロボコンとは?
そもそも、ETロボコンとは何か?ということですが、ETロボコンは、2002年から開始されたソフトウェア重視のロボットコンテストであり、組込み技術者の育成を目的としています。このコンテストは、その長年にわたる開催と貢献により、経済産業大臣賞を受賞しています。
詳細は、下記を参照してください。
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 が、下記手順により導入されている
手順概要
以下のような手順になります。
- GDB をインストールする
- CMakeLists.txt を修正する
- Google Test Adapter をインストールする
- Google Test Adapterの設定をする
- ビルドする
- テスト実行する
- テストをデバッグ実行する
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
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++
おわりに
Google Test Adapterを用いることで、Google Testが少しだけ使いやすくなります。また、デバッガを使えるようになることで、テストプロセスの効率化につながり、ETロボコン参加者にとっても、開発速度とコード品質の向上に寄与します。ぜひ、トライしてみてください。
参考
Google Test を使ってみる(その4:VSCode拡張機能編)
Discussion