2015-12-28 2 views
0

Мы работаем над чипом STM32F103 (ARM Cortex M3) и скомпилируем наш проект с помощью uVersion (компилятор ARM-MDK). Когда произошел сбой, мы сохранили регистры ПК и LR. После этого мы хотели бы сопоставить адреса, сохраненные в регистрах ПК и LR, на строки исходного кода для чтения человеком, написав некоторые сценарии. Я прочитал это What are .axf files?, в котором говорится, что axf содержит такую ​​информацию. Но я не знаю, как его использовать. Большое спасибо.Как сопоставить ARM Cortex M3 PC/LR адрес с исходной строкой?

[обновление 1]
Сегодня я попробовал fromelf.exe, который может сбросить некоторую отладочную полезную информацию (fromelf.exe --text -g E: \ proj_keil \ keil_output \ test.axf), например:

008f5d: SPECIAL(0, 1) : 13 080043cc: ..\init\main.c:23.5 
008f5e: DW_LNS_negate_stmt : 06 
008f5f: SPECIAL(1, 2) : 1a 080043d0: ..\init\main.c:24.5 [ 

Когда я ищу разбившийся адрес компьютера (0x080043d0), я могу найти свою соответствующую исходную строку, хотя я не нашел источник линии LR-адрес в этой аварии.

Могу ли я использовать fromelf.exe, чтобы решить мою проблему?

+0

Я не знаю о ARM-MDK, но gcc toolchain имеет утилиту «addr2line», используемую для этой цели. Скорее всего, ваша инструментальная цепочка имеет нечто похожее. Addr2line нуждается в файле .elf с отладочной информацией. .axf похоже, тот же файл, что и .elf с debug .. – mkmk88

ответ

1

Символ и отладочная информация используется отладчиком. Текущее местоположение кода и стек вызовов отображаются непосредственно в отладчике.

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

Если вам нужно сделать это посмертное слово без отладочной информации, его можно определить вручную, используя информацию из файла карты, чтобы определить ближайший общедоступный символ, а затем .lst файлы, чтобы определить точное местоположение как смещение от местоположения карты ссылок. Генерация файлов .map и .lst - это параметры проекта в uVision.

+0

Спасибо @Clifford, сегодня я попробовал theelf.exe и обновил некоторую информацию об этом, могу ли я использовать fromelf.exe вместо этого? – bettermanlu

+0

Nice one +1 для этого –

+0

Использование инструмента для извлечения символов отладки из объектного кода будет работать до тех пор, пока файл объектного кода фактически содержит отладочную информацию. Файл карты генерируется в сборке и генерируется независимо от того, скомпилирована ли информация отладки. Поскольку отладчик в любом случае обычно является самым простым способом * отладки * кода, то я вижу небольшое преимущество в том, что это трудно. – Clifford

Смежные вопросы