以下の内容はhttps://daisuke20240310.hatenablog.com/entry/renodevsc2より取得しました。


QEMUに似たRenodeでVSCodeを使ってRenode自体をデバッグする

Renode という QEMU に似たオープンソースのエミュレータを試しています。

前回 は、STM32 のサンプルアプリを対象として、GDB でデバッグする代わりに、VSCode を使ってデバッグするところまで行いました。

今回は、STM32 のサンプルアプリではなく、サンプルアプリが動いている Renode 自体をデバッグする環境を構築していきます。

それでは、やっていきます。

はじめに

「QEMUを動かす」の記事一覧です。良かったら参考にしてください。

QEMUを動かすの記事一覧

まず、Renode の公式サイトは以下です。

https://renode.io/

Renode の公式のドキュメントは以下です。

https://renode.readthedocs.io/en/latest/

また、GitHub は以下です。

https://github.com/renode/renode

今回は、Renode 自体を VSCode でデバッグします。

VirtualBoxのUbuntu22.04にVSCodeをインストールする

Windows で起動した VSCode からリモートエクスプローラを使って、Renode をデバッグしてみましたが、なぜかうまくいきませんでした。

そこで、VirtualBox の Ubuntu 22.04 に VSCode をインストールして、直接 Ubuntu 22.04 上で VSCode を使ってデバッグします。

まず、Ubuntu 用の VSCode をダウンロードします。

code.visualstudio.com

ダウンロードできたら、apt を使ってインストールします。

$ sudo apt install ./code_1.89.1-1715060508_amd64.deb

ダウンロードが完了したらアクティビティ?(スタートメニュー?)に Visual Studio Code のアイコンが追加されるので、クリックして起動します。

メニューにVSCodeが追加された
メニューにVSCodeが追加された

フォルダを開こうとしたら、下図のように、だいぶおかしいです。

VSCodeのフォルダを開くがおかしい
VSCodeのフォルダを開くがおかしい

仕方ないので、端末(コンソール)からフォルダを指定して起動します。

$ cd renode
$ code .

無事、フォルダを開いた状態で起動できました。

VirtualBox の Ubuntu 22.04 に VSCode をインストールする手順は以上です。

Renode自体をVSCodeでデバッグする

Renode の公式ドキュメントの導入の Renode の開発に、Renode 自体をデバッグする方法が書かれているので、それに従ってやってみます。

-d オプションを付けて、再ビルドが必要なようです。

$ ./build.sh -d
(省略)
Build succeeded.

Warnings:

/home/daisuke/svn_/renode/renode/Renode.sln (default targets) ->
(Build target) ->
/home/daisuke/svn_/renode/renode/src/Infrastructure/src/Emulator/Peripherals/Peripherals.csproj (default targets) ->
/usr/lib/mono/xbuild/14.0/bin/Microsoft.CSharp.targets (CoreCompile target) ->

        /home/daisuke/svn_/renode/renode/src/Infrastructure/src/Emulator/Peripherals/Peripherals/DMA/STM32WBA_GPDMA.cs(472,40): warning CS0649: Field 'STM32WBA55_GPDMA.Channel.triggerOverrunInterruptEnable' is never assigned to, and will always have its default value null

         1 Warning(s)
         0 Error(s)

Time Elapsed 00:03:55.0974530

エラー無くビルドが完了しました。

前回 見たように、.vscode/launch.json には、Renode 自体のデバッグの設定が用意されています。

launch.json を以下のように、少し変更しました。変更したのは、デバッグビルドは既に完了してるので、preLaunchTask を削除したのと、デバッガが起動したら停止するようにしました(どっちが効くのか分からなかったので両方記述しました)。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch - Debug",
            "stopOnEntry": true,
            "stopAtConnect": true,
            "type": "mono",
            "request": "launch",
            "program": "${workspaceRoot}/output/bin/Debug/Renode.exe",
            "cwd": "${workspaceRoot}",
        },
    ]
}

では、Renode をデバッグ起動していきます。

どこかにブレークポイントを設定しておきます。今回は、前に少しだけ確認した LoadELF関数にブレークポイントを設定してみます。src/Infrastructure/src/Emulator/Main/Peripherals/Bus/SymbolLookup.cs の 181行目あたりです。

Launch - Debug を設定して、デバッグを開始します。

そうすると、Mono Debug をインストールしますか?と聞かれるので、はいを選択します。

しばらくすると、Renode モニターが起動します。いつも通り、環境を設定します。

(monitor) i @renode-config.resc

すると、先ほど設定したブレークポイントで停止しました。ステップ実行が出来ますし、変数の値も見れます。デバッグ環境が構築できました。

Renode自体をVSCodeでデバッグできた
Renode自体をVSCodeでデバッグできた

おわりに

今回は、簡単な手順で、Renode 自体を VSCode でデバッグできるようになりました。

次回は、Renode の他の機能を試してみたいと思います。

最後になりましたが、エンジニアグループのランキングに参加中です。

気楽にポチッとよろしくお願いいたします🙇

今回は以上です!

最後までお読みいただき、ありがとうございました。




以上の内容はhttps://daisuke20240310.hatenablog.com/entry/renodevsc2より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14