はじめに
ScarthgapからVS Codeを使用してプログラムをデバッグする機能が実装された。 この機能を使用すると、VS Codeで実機上のプログラムにブレークポイントを貼ったり変数を見たり、 ソースコードでレベルのデバッグが可能となる。
ユーザーランドのプログラムが対象となる。
C/C++のみならず、Pythonのプログラムもデバッグできることが確認できているが 今回はC++のプログラムを試す。
環境構築
作業ディレクトリ
作業ディレクトリを作成する。
$ mkdir -p ~/yocto/scarthgap $ cd ~/yocto/scarthgap
Pokyの取得
scarthgapブランチの最新を使用する場合は下記。
$ git clone git://git.yoctoproject.org/poky.git -b scarthgap
リリースされたタグのバージョンを使用する場合は下記。
$ git clone git://git.yoctoproject.org/poky.git $ git fetch --tags $ git checkout -b tags/scarthgap-5.0.2 scarthgap-5.0.2
local.confの修正
qemuのための設定
MACHINE ?= "qemuarm64" INIT_MANAGER ?= "systemd" DL_DIR ?= "${TOPDIR}/../downloads" QB_OPT_APPEND:append = " -echr 0x14"
2.4.3 devtool ide-sdk configures IDEs for the extensible SDKにあるデバッグのための設定
# Build the companion debug file system IMAGE_GEN_DEBUGFS = "1" # Optimize build time: with devtool ide-sdk the dbg tar is not needed IMAGE_FSTYPES_DEBUGFS = "" # Without copying the binaries into roofs-dbg, GDB does not find all source files. IMAGE_CLASSES += "image-combined-dbg" # SSH is mandatory, no password simplifies the usage EXTRA_IMAGE_FEATURES += "\ ssh-server-openssh \ debug-tweaks \ " # Remote debugging needs gdbserver on the target device IMAGE_INSTALL:append = " gdbserver" # Add the recipes which should be modified to the image # Otherwise some dependencies might be missing. #IMAGE_INSTALL:append = " my-recipe"
ビルド
bitbakeを実行する。
$ source poky/oe-init-build-env $ bitbake core-image-minimal
QEMUの起動
別の端末でQEMUを起動する。
$ cd ~/yocto/scarthgap $ source poky/oe-init-build-env $ runqemu nographic
sshでリモートログインできることを確認する。
$ ssh root@192.168.7.2
鍵の変更
イメージをビルドし直したりすると以下のようなエラーになる。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ED25519 key sent by the remote host is SHA256:7KqOsjJ5UpIVp4+93opn8mKZpG1qE7foMbt26ItqmXA. Please contact your system administrator. Add correct host key in /home/mickey/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /home/mickey/.ssh/known_hosts:41 remove with: ssh-keygen -f "/home/mickey/.ssh/known_hosts" -R "192.168.7.2" Host key for 192.168.7.2 has changed and you have requested strict checking. Host key verification failed.
下記のコマンドを実行して古い鍵情報を削除する。
$ ssh-keygen -f "/home/mickey/.ssh/known_hosts" -R "192.168.7.2"
VS Codeでのデバッグ
デバッグ対象プログラム
デバッグ対象のプログラムをworkspaceに展開する。
$ devtool add https://github.com/mickey-happygolucky/hello-autotools.git -B main
VS Codeの設定ファイル
$ devtool ide-sdk hello core-image-base --target root@192.168.7.2
パラメータは以下のようになっている。
$ devtool ide-sdk <プログラム> <イメージ> --target <ターゲットの接続情報>
デバッグ
VS Codeでプロジェクトを開く
$ code workspace/sources/hello/
以下のようなウィンドウが表示される。
ブレークポイント設定
画面左側のEXPLORER
からsrc/main.cpp
を選択する。
エディタに表示される行番号の左側をクリックするとブレークポイントを設定することができる。 今回は4行目にブレークポイントを設定する。
画面左側のデバッグアイコンをクリックする。
デバッグ開始をクリックする。
場合によっては以下のようにメッセージボックスが表示されるので気にせずキャンセルする。
メッセージボックスをすべてキャンセルすると、エントリポイントでプログラムが停止する。
画面上部の継続ボタンをクリックする。
設定したブレークポイントの位置でプログラムが停止する。
バックグラウンドの動作
VS Codeで、ビルドやデバッグ開始を行うと実際には次のような処理が行われる。
ビルド
- devtool build
デバッグ開始
- devtool deploy-target
- ターゲットのgdbserver起動
- gdb接続
まとめ
devtool ide-sdkを使用することでVS Codeと連携するための設定ファイルを出力することができる。 VS Codeでシームレスにソースコードの修正、ビルド、デバッグが行えるので非常に便利。
今回はBitBake環境でdevtoolを使用したが、 拡張SDK(Extensible SDK)環境のdevtoolでも同様のことが可能となっている。
Scarthgapから導入された機能なので、それ以前のバージョンでは使用することができない。