gps-sdr-simをデバッグ実行する環境を構築してみた(WSL編)
動機
- 前回、Windowsでgps-sdr-simをデバッグ実行する環境を構築。
- しかし、以下の理由でWindowsよりもLinuxの方が適正がありそう。
- LinuxはSDRおよびGNSS解析コミュニティでメジャー
- SDRボード関連の多くのライブラリはLinuxを利用している。
- Linuxカーネルは低レベルのハードウェアI/O処理に優れており、リアルタイム性が優れる。
- etc ... - 慣れ親しんだWindowsも手放せない。
手順
ステップ1 WSLとUbuntuのインストール: Windows上でLinux環境を実行するための機能としてWSLと、Linuxの標準ディストリビューションであるUbuntuをインストール。
ステップ2 Ubuntu環境に開発ツールをインストール: C言語のコンパイラやデバッガなどをUbuntu上にインストール。
ステップ3 VSCodeにWSL拡張機能をインストール
ステップ4 VSCodeをWSLに接続してプロジェクトを開く
ステップ5 コンパイルと実行
ステップ6 デバッグ実行
ステップ1: WSLとUbuntuのインストール
WSLをインストールしていない場合はPowerShellまたはコマンドプロンプトを管理者として開き、以下のコマンドを実行します。
wsl --install
インストールが完了したらPCを再起動します。
再起動後、Ubuntuのターミナルを起動させてLinux用のユーザー名とパスワードを設定します。
ステップ2: Ubuntu環境に開発ツールをインストール
次に、WSLのUbuntu環境に必要なC/C++開発ツールをインストールします。
Ubuntuターミナルを開いて以下のコマンドを順番に実行します。
# パッケージリストを最新の状態に更新
sudo apt update
sudo apt upgrade
# C/C++コンパイラ(GCC)、デバッガ(GDB)、makeなどを一括でインストール
sudo apt install build-essential gdb
(補足)
build-essential: GCC, G++, makeなど、C/C++のビルドに必要な基本的なツールがまとめて入っている便利なパッケージです。
gdb: デバッガでステップ実行などに使われます。
ステップ3: VSCodeにWSL拡張機能をインストール
Windows上でVSCodeを起動して左側の拡張機能パネルを開き、WSLと検索します。
Microsoft提供の拡張機能である「WSL」をインストールし、Windows側のVSCodeにWSLを連携させます。
ステップ4: VSCodeをWSLに接続してプロジェクトを開く
Ubuntuターミナルを開きます。
gps-sdr-simのプロジェクトフォルダに移動します。
ソースを置きたいディレクトリ(例:home/[usr]/projects)にてgit cloneを実行します。
# 例: ホームディレクトリにprojectsフォルダを作り、そこにクローンした場合
cd ~/projects/gps-sdr-sim
そのフォルダで、以下のコマンドを実行します。
code .
このコマンドを実行すると、自動的にWindows側でVSCodeが起動し、WSL内のフォルダに接続された状態になります。VSCodeウィンドウの左下に緑色のインジケーターが表示され、「WSL: Ubuntu」のように表示されていれば成功です。
ステップ5: コンパイルと実行
VSCodeがWSLに接続された状態で、内蔵ターミナルを開く(Ctrl + @)と、PowerShellではなくUbuntuのbashターミナルが開きます。
コンパイル: コマンドはWindowsの時とほぼ同じですが、出力される実行ファイル名に.exeは付きません。
# -gオプションを付けてコンパイル
gcc -g gpssim.c -lm -o gps-sdr-sim
実行: Linuxでは、./を付けて実行します。
./gps-sdr-sim -e brdc0010.22n -l 35.6,139.7,100
※デフォルトで用意されているRINEXファイルを使用 brdc0010.22n
ステップ6: デバッグ実行
デバッグの操作感はWindowsの時と全く同じですが、設定ファイルlaunch.jsonの内容がLinux用に変わります。ブレークポイントを設定し、F5キーを押します。
初回はlaunch.jsonの作成を求められます。「C++ (GDB/LLDB)」→「Default Configuration」などを選択します。
生成された.vscode/launch.jsonを以下のように編集します。
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch on WSL",
"type": "cppdbg",
"request": "launch",
"preLaunchTask": "Build gps-sdr-sim",
"program": "${workspaceFolder}/gps-sdr-sim", // WSLでは.exe がない
"args": [
"-e",
"brdc0010.22n", // デフォルトのephemerisのファイルを直接指定
"-l",
"35.6,139.7,100"
],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb", // LinuxでのGDBのパス
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
Windows版との主な違い:
program: 実行ファイル名から.exeがなくなります。
miDebuggerPath: gdb.exeのWindowsパスではなく、Linuxでの標準的なパス /usr/bin/gdb を指定します。
これで設定は完了です。F5キーを押せば、Windowsの時と全く同じように、ステップ実行、変数のウォッチ、コールスタックの確認といったデバッグがWSL上のLinux環境に対して行えます。
補足
チームで統一した開発環境を構築するために以下のJSONファイルを追加しておくとよい。
・VSCodeで使用する拡張機能について記載したextensions.json
・コーディングスタイルの統一を目的としたsettings.json
・ビルド作業の効率化を目的としたtasks.jsonなど
まとめ
Windows上でLinuxを動作させるWSLを用いることでUbuntu環境とし、VSCodeを用いたデバッグ実行するための環境を構築。
Windows上のものと若干異なるWSL上ならではのlaunch.jsonファイルを作成する。
-g 付きでコンパイルしたexeファイルは、通常実行にもデバッグ実行にも使える。
Discussion