コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2024年1月3日 >>> 2024年1月3日
link もっと後

2024年1月3日

VSCodeでRISC-Vボードをデバッグその4 - SSH Remote ExtensionでGDBをボードにアタッチ

目次: Linux

前回はLinuxマシン単独でGDBを使ってRISC-Vボードのデバッグを行うところまでを設定しました。

今回はその続きで、Visual Studio Code(以降VSCode)とSSH Remote Extensionを使ってGDBをOpenOCDに接続しRISC-Vボードをデバッグします。


C/C++ Extension Packをインストール

C/C++デバッグ用のExtensionをSSH接続先にインストールします。C/C++ Extension Packをインストールしておくのが便利だと思います。


launch.json fileの作成

左側のActivity BarからRun and Debugを選択して(矢印1)、create a launch.json fileを押すと(矢印2)、デバッガを選べと言われるのでC++ (GDB/LLDB)を選択します(矢印3)。もしC++ (GDB/LLDB)が選択肢に現れない場合は、ソースコードウインドウを全部閉じてからもう一度やってください。


CMakeLists.txtを選択していた時に出るエラー

C言語ではないファイルを開いてRun and Debugやcreate a launch.json fileを押すと選択肢が変わるので注意してください。例えばCMakeLists.txtを開いてRun and Debugを押すと"CMake does not support automatic debugging for this file"とエラーが表示されるだけで何も起きません。

VSCodeは何もファイルを開いていなければ使用可能なデバッガを全て列挙し、開いているファイルがあればそのファイルに対して使用可能なデバッガだけを表示するようです。この仕様は初見だと分かりにくいですね……慣れたら便利なのかなあ?

Linuxマシン側の準備

詳細はその2(2023年12月30日の日記参照)にて紹介していますので、ダイジェストでお送りします。

ボードとSSH接続先のLinuxマシンを接続します。メニューの[Terminal] - [New Terminal]で1つ目の端末を開いてOpenOCDを起動します。

OpenOCDの起動
$ sudo openocd -c 'bindto 0.0.0.0' -f tcl/interface/jlink.cfg -f tcl/board/sifive-hifive1-revb.cfg

メニューの[Terminal] - [New Terminal]で2つ目の端末を開いてGDBを起動し、実行ファイルをロードします。launch.jsonの"program"で指定した実行ファイルをロードしてください。

GDBの起動
$ riscv64-zephyr-elf-gdb build/zephyr/zephyr.elf

(gdb) target remote localhost:3333
(gdb) monitor reset halt
(gdb) load
(gdb) continue

UARTを見てRISC-Vボードが正常に動作していることを確認します。

UARTの確認
$ pyserial-miniterm /dev/ttyACM0 115200 --raw

ここまで確認出来たらいよいよVSCodeからGDBを起動できます。長かったですね。

デバッガの設定

先ほど紹介したcreate a launch.jsonを選択するとGDBを起動する設定が生成されます。

生成されたlaunch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": []
}

が、バグっているのか何なのか、ほぼ何も書かれていないlaunch.jsonが生成されます。なぜ……?無いものは仕方ないので、

launch.jsonに追記

{
    "version": "0.2.0",
    "configurations": [        
        {
            "name": "(gdb) Attach",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/zephyr/zephyr.elf",
            "cwd": "${workspaceFolder}",
            "MIMode": "gdb",
            "miDebuggerPath": "/home/katsuhiro/work/zephyr-sdk/riscv64-zephyr-elf/bin/riscv64-zephyr-elf-gdb",
            "miDebuggerServerAddress": "localhost:3333",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true,
                },
            ],
        },
    ]
}

上記のように変えます。デバッガのパス(miDebgguerPath)は適宜環境に合わせてください。


デバッガ起動

VSCodeのRun and Debugから先ほど作成した設定でデバッガを起動します。


デバッグ用のツールバー

デバッガが起動してOpenOCDに接続できるとVSCodeの上部に小さなツールバーが出てきます。出ない場合は下部にエラーメッセージが表示されるはず。


Pause後の画面の例

ツールバーのPauseボタン(左端)を押すと、HiFive1ボードの実行が停止して実行中のプログラムのソースコードが表示され、コールスタックの表示なども動作するはずです。ブレークポイントの設定や再開、ステップ実行などもできます。

私はCUIでもあまり困らないタイプですが、デバッガだけはGUIの方が見やすくて捗りますね。VSCodeのコード閲覧性が良いというのもありそうです。

できていない点

実質デバッガのアタッチしかできていません。ボードのリセット、実行ファイルのロードを端末から手動でやっている点が非常にイマイチです。

VSCodeのC/C++ Debugger Extensionは良く知らないので、VSCodeから実行する方法が判明したら追記しておきます。

編集者:すずき(2024/01/05 19:48)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2024年1月3日 >>> 2024年1月3日
link もっと後

管理用メニュー

link 記事を新規作成

<2024>
<<<01>>>
-123456
78910111213
14151617181920
21222324252627
28293031---

最近のコメント5件

  • link 24年6月17日
    すずきさん (06/23 00:12)
    「ありがとうございます。バルコニーではない...」
  • link 24年6月17日
    hdkさん (06/22 22:08)
    「GPSの最初の同期を取る時は見晴らしのい...」
  • link 24年5月16日
    すずきさん (05/21 11:41)
    「あー、確かにdpkg-reconfigu...」
  • link 24年5月16日
    hdkさん (05/21 08:55)
    「システム全体のlocale設定はDebi...」
  • link 24年5月17日
    すずきさん (05/20 13:16)
    「そうですねえ、普通はStandardなの...」

最近の記事3件

  • link 22年3月18日
    すずき (06/22 17:32)
    「[射的 - まとめリンク] 目次: 射的一覧が欲しくなったので作りました。ガスガン その1ガスガン その2ガスガンが増えました...」
  • link 23年11月25日
    すずき (06/22 17:31)
    「[JTSA Limited大会参加2023] 目次: 射的JTSA Limitedの大会に参加しました。いつも使っているエアガ...」
  • link 24年5月26日
    すずき (06/22 17:16)
    「[JTSA Unlimited大会参加2024] 目次: 射的JTSA Unlimitedの大会に参加しました。去年は選手登録...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 06/23 00:12