WebベースのESP Stack Trace Decoderがクールで便利!素早くエラーをトレースする方法
Arduino で ESP32 のプログラムを開発中、一度は Guru Meditation Error など、強制的にリセットがかかってしまう Exception was unhandled な経験をしたことがあると思います。
そんな時に役立つツールとして以下が挙げられます。
- addr2line
CLI で、コマンドの打ち込みが割と面倒です。 - me-no-dev/EspExceptionDecoder
Arduino IDE 1.x で 2.x では動作しません。 - dankeboy36/esp-exception-decoder
Arduino IDE 2.x 用ですが、時々 IDE の再起動が必要になるなど安定性に欠けています(IDE の問題かプラグインの問題かは不明ですが…)。
と言うことで、ドラッグ&ドロップ+コピペ OK の Web サイト ESP Stack Trace Decoder を紹介します。
※ 2025年6月3日 サイトが移転していたので、リンクを修正しました。
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 って?
このクールなサイトは、esphome/esp-stacktrace-decoder の GitHub Pages にホストされています。
Rust の WebAssembly アプリケーションとして作成されていて、サーバーへのホスト方法も解説されているので、自分専用を作ることも可能と思います。
余談ですが、つい先日までちょっとした不具合があり、修正用の PR も放置されていたので、これを機会に Rust の勉強も兼ねて自分でホストしようと試みたのですが、僕の Mac が古いためか Rust がうまくインストール出来ませんでした 💦
でも お願いしたら直ぐに対応してくれました ⛳️ メデタシ、メデタシ。