2016-11-17 10 views
1

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

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

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

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

+0

У вас есть необработанный файл ELF с информацией отладки для сборки? В противном случае маловероятно, что вы получите гораздо больше, чем имя функции из него (если у вас есть символы на нем.) –

+0

Да, я знаю, и у меня есть контроль над процессом сборки, поэтому я могу добавить все, что нужно, чтобы сделать это возможно. То есть решение может включать дополнительные этапы сборки, а также сбор данных. –

ответ

0

В пользу кого-либо еще с этой проблемой, вот что я делаю:

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

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

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