WebベースのESP Stack Trace Decoderがクールで便利!素早くエラーをトレースする方法
Arduino で ESP32 のプログラムを開発中、一度は Guru Meditation Error
など、強制的にリセットがかかってしまう Exception was unhandled
な経験をしたことがあると思います。
そんな時、従来は Exception Stack Trace Decoder や addr2line が利用されてきたと思いますが、前者の .jar
ファイルは僕の環境で動かないし、後者は CLI が面倒。
と言うことで、ドラッグ&ドロップ+コピペ OK の Web サイト ESP Stack Trace Decoder を紹介します。

ESP Stack Trace Decoder の使い方
-
Web サイト を開きます。
-
「ファイルを選択」のボタンに
.elf
ファイルをドラッグ&ドロップします。 -
Arduino IDE のシリアルモニタから
Backtrace:
の16進数の塊をコピーし、Stack trace:
に貼り付けます。 -
Run!
ボタンでアドレスと関数の行番号リストがOutput:
に表示されるので、エラーの発生経路を追跡します。
ELF ファイルの見つけ方
ELF ファイルはコンパイル時にキャッシュフォルダに作成されます。このキャッシュフォルダは Arduino IDE のバージョン 2.3.4 前後で異なるので、コンパイル時の情報を見るのが一番確実な方法です。
-
IDE メニューから「Arduino IDE > 基本設定…」からダイアログを開きます。
-
「より詳細な情報を表示する」の「コンパイル」をチェックし、「OK(O)」します。
-
「検証」ボタン
で再コンパイルします。
-
「出力」タブから「
プロジェクト名.ino.elf
」を含む行、あるいは「以前コンパイルされたファイルを使用中:」の行からキャッシュフォルダへのパスをコピーします。 -
コピーしたパスをエクスプローラー(Windows)またはファインダー(Mac)で開いたら、「
プロジェクト名.ino.elf
」を検索します。
ELF ファイルへの素早いアクセス方法
Arduino キャッシュフォルダへのショートカット(Windows)またはエイリアス(Mac)を作成しておくのが良いでしょう。
Windows の場合
エクスプローラーのアドレスバーに %localappdata%
を入力し、上記でコピーしたパスを辿るのが手っ取り早いと思います。
Mac OS の場合
ファインダーを開き、Shift + Command ⌘ + G
またはメニューの「移動 > フォルダへ移動…」からダイアログを開き、コピーしたフォルダへのパスをペーストします。
ブラウザから「ファイルを選択」した場合は、Shift + Command ⌘ + .
(ピリオド)で隠しフォルダを表示し、「Macintosh HD」からユーザーフォルダの「ライブラリ > Caches > Arduino > Sketches」へと辿ることが出来ます。

ESP Stack Trace Decoder って?
このクールなサイトは、maximeborges/esp-stacktrace-decoder の GitHub Pages にホストされています。
Rust の WebAssembly アプリケーションとして作成されていて、サーバーへのホスト方法も解説されているので、自分専用を作ることも可能と思います。
余談ですが、つい先日までちょっとした不具合があり、修正用の PR も放置されていたので、これを機会に Rust の勉強も兼ねて自分でホストしようと試みたのですが、僕の Mac が古いためか Rust がうまくインストール出来ませんでした 💦
でも お願いしたら直ぐに対応してくれました ⛳️ メデタシ、メデタシ。