Инструменты для извлечения трассировки стека FreeRTOS / ARM / C ++ из дампа стека и файла .elf?

У меня встроенная система ARM Cortex-M4 под управлением FreeRTOS. Я реализовал механизм дампа журнала сбоев, который записывает файл на устройство хранения в случае фатальной ошибки, такой как деление на ноль, нулевой указатель, ошибки адреса, недопустимая инструкция или утверждения. В этом файле я, помимо прочего, записываю содержимое стека на момент исключения.

Эта система фиксирует сбои, которые происходят в полевых условиях, поэтому идея состоит в том, чтобы проанализировать сбои, которые возвращаются мне, и определить источник проблемы, насколько это возможно. Я могу легко подключить журнал к .elf, который был создан при компиляции этой версии кода. Мне просто нужен способ его разобрать.

Я предполагаю, что есть инструменты, которые уже могут это сделать (я не могу быть первым, кто это сделает), но у меня возникают проблемы с поиском чего-то в The Series of Tubes (tm), отвечающего всем требованиям.

Есть ли хорошая отправная точка для создания инструмента, который может анализировать .elf из компиляции и следовать дампу стека для создания такого отчета?


person Jim B.    schedule 17.11.2016    source источник
comment
У вас есть распакованный ELF-файл с отладочной информацией для сборки? В противном случае маловероятно, что вы получите от него нечто большее, чем просто имя функции (если на нем вообще есть символы).   -  person Diego Elio Pettenò    schedule 18.11.2016
comment
Да, да, и я контролирую процесс сборки, поэтому могу добавить все необходимое, чтобы это стало возможным. Т.е. решение может включать в себя дополнительные этапы сборки, а также сбор данных.   -  person Jim B.    schedule 18.11.2016


Ответы (1)


Чтобы помочь всем, у кого есть эта проблема, вот что я делаю:

У Google есть инструмент под названием «breakpad», который может анализировать файлы .elf и crashlog в формате «minidump», который был первоначально создан Microsoft и адаптирован Google для Chrome.

Я пишу инструмент для преобразования трассировки стека в формат минидампа в надежде использовать инструменты панели прерывания для анализа журналов сбоев.

Вот ссылка на breakpad: https://github.com/google/breakpad/blob/master/docs/getting_started_with_breakpad.md

person Jim B.    schedule 21.11.2016