-
Notifications
You must be signed in to change notification settings - Fork 0
Парсинг исключений
После того, как Embox упал, вы увидите длинное сообщение.
Разберем его по порядку:
***** Fatal exception 0
Тут важна циферка. Она указывает на тип ошибки.
Сопоставить циферку с типом можно посмотрев файл src/arch/xtensa/include/hal/exception.h
pc=0x40258d5d sp=0x3ffffe70 excvaddr=0x00000000
ps=0x00000030 sar=0x00000000 vpri=0x00000001
С текущим уровнем развития наших технологий, информация не несет практического приминения.
При желании узнать про эти регистры можно тут (раздел 3.3 Registers)
r*: 0x* = *
В таком виде печатаются a0 - a15 регистры. Практического приминения так же не очень много.
Самое интересное идет в конце. Это вывод стека.
Он достаточно большой, чтобы полностью копировать его в документацию. Да и это не особо нужно.
Сейчас я расскажу, как им пользоваться.
- Нужно скопировать все, что находится между знаками равно (
=
).
- Затем, запускаем скрипт
.decode-stacktrace.sh
$ ./scripts/esp8266/decode-stacktrace.sh
- Вставляем туда то, что у нас скопировано
- ???
- Профит
Теперь мы видим непонятные упоминания некоторых функций.
Полезно обратить внимание на первую строку, в которой есть 0x*
Там будет упоминание о функции и файле, в которой выпало исключение
Известные баги:
- Вместо циферок, которые указывают на строку/символ, стоят знаки вопроса
Решение: добавить флаг компилятора-g
Ветка разработки: xtensa-esp8266-exceptions
Issue для обсуждения: Обработка исключений