LoginSignup
0
0

MacでESP32のデバッグをする

Last updated at Posted at 2024-01-09

ESP32を開発時に、Arduino IDEのコンソールで表示されるBacktraceをちゃんと読み解く。

0. 試した環境

MAC: 12.5.1(Monterey)
Arduino IDE: 1.8.19

1. 環境設定

ツールをインストール
$ mkdir -p ~/esp
$ cd ~/esp
$ wget https://dl.espressif.com/dl/xtensa-esp32-elf-macos-1.22.0-97-gc752ad5-5.2.0.tar.gz
$ tar -xzf xtensa-esp32-elf-macos-1.22.0-97-gc752ad5-5.2.0.tar.gz
パスを設定
.zshrc
# 下記を適当な場所に追加
export PATH=$HOME/esp/xtensa-esp32-elf/bin:$PATH
alias get_esp32="export PATH=$HOME/esp/xtensa-esp32-elf/bin:$PATH"
.zshrcを読み直し
$ source .zshrc

2. コンパイル済みのファイルを取得

↓Arduino IDEでコンパイル時に下記のように出力されるパスを確認

image.png

※ もし、見つからない場合は下記でも探せるかもです。

$ cd /private/var/folders
$ find ./ -name "arduino_build_*" -ls 2> /dev/null

63836113        0 drwxr-xr-x   13 yuki             staff                 416  1  7 13:10 .//_l/sdy4_tn574g1_0pphk0rv0pm0000gp/T/arduino_build_368937
63836936        0 drwxr-xr-x   13 yuki             staff                 416  1  7 09:48 .//_l/sdy4_tn574g1_0pphk0rv0pm0000gp/T/arduino_build_526620


上記の最新の日付っぽいものをもってくると良い気がします

3. 実行

※ 元のファイルが「hogehoge.ino」の場合

$ xtensa-esp32-elf-addr2line -pfiaC -e hogehoge.ino.elf 0x4008d65d:0x3ffcb5e0

↓ 下記の様な感じで出力される
0x4008d65d: esp_system_abort at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/esp_system/esp_system.c:137

4. より効率のよいデバッグ

$ perl esp32_decode_codes.pl --elf=[elf_file_full_path] --codes=[0x4008388d:0x3ffcb5c0...]

下記にまとめてtraceのメッセージを出してくれるスクリプト置いときます

esp32_decode_codes.pl
#!/usr/bin/perl
#-----------------------------
# esp32のdumpをデコードしてエラーメッセージを確認するプログラム
#
# usage: $ perl esp32_decode_codes.pl --elf=[elf_file_full_path] --codes=[0x4008388d:0x3ffcb5c0...]
#-----------------------------
use strict;
#use warnings;
use XML::Simple;
use Data::Dumper;
use File::Find::Rule;
use Smart::Options;

my $xml = XML::Simple->new(ForceArray => 1);
my $argv = Smart::Options->new->parse;

unless (defined($argv->{'elf'}) && defined($argv->{'codes'})) {
  print 'usage: $ perl esp32_decode_codes.pl --elf=[elf_file_full_path] --codes=[0x4008388d:0x3ffcb5c0...]', $/;
  exit;
}

decode_codes($argv->{'elf'}, $argv->{'codes'});

sub decode_codes {
  my $elf_file_path = $_[0];
  my $codes_as_string = $_[1];

  $codes_as_string =~ s/Backtrace: //g;

  my @codes = split(" ", $codes_as_string);

  print "---------------------------------------------------", $/;
  print "elf_file_path ", $elf_file_path, $/;
  print "codes_as_string ", $codes_as_string, $/;
  print "---------------------------------------------------", $/;
  
  foreach my $code_as_string(@codes) {
    my $command = "xtensa-esp32-elf-addr2line -pfiaC -e $elf_file_path $code_as_string";
    
    print `$command`, $/;
  }
  print $/;

}

exit;

References

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0