Комментарии 8
Так где и какая ошибка-то была с массивом вашим?
В принципе, если вы знаете регионы памяти где лежит код программы, то вы можете фильтровать ваш выхлоп стека и выводить только те, которые находятся в пределах этого региона. Тогда вы получите более-менее похожее на настоящий стектрейс.
Если все равно выводить адреса, а не текстовые имена функций, то какая разница? Все равно копировать и отладчику скармливать. Разве что дамп будет поменьше.
Я, кстати, не уверен какие артефакты генерит Keil во время сборки, но если есть наряду с бинарем на прошивку какой-нибудь elf с отладочной информацией (или без неё, неважно), то можно довольно быстро набросать скрипт на питоне, который подставляет имена функций вместо адресов. Можно даже написать, чтобы он делал это on the fly, то есть читал бы uart, находил бы стектрейс, заменял адреса на имена функций и выводил бы дальше в файл или std out.
>> Адрес возврата из текущей функции находится в регистре LR
В общем случае неверно, сильно зависит от компилятора и опций оптимизации. Например фукнция вызывает две фукнции, псевдокод:
Оптимизатор вообще творит всякое что не запрещено.
Вообще, если памяти не запредельное количество — делать полный дамп озу и регистров хорошая идея. Полный слепок в момент падения, позволяет сделать больше чем только стектрейс.
В общем случае неверно, сильно зависит от компилятора и опций оптимизации. Например фукнция вызывает две фукнции, псевдокод:
push lr
bl A
<- тут lr не содержит корректный адрес возврата для этой функции
bl B
pop pc
Оптимизатор вообще творит всякое что не запрещено.
Вообще, если памяти не запредельное количество — делать полный дамп озу и регистров хорошая идея. Полный слепок в момент падения, позволяет сделать больше чем только стектрейс.
В общем случае неверно, сильно зависит от компилятора и опций оптимизации.
Соглашусь, но если коллстек строит IDE, то это не принципиально. А руками стек разбирать мне все равно не очень хочется.
Вообще, если памяти не запредельное количество — делать полный дамп озу и регистров хорошая идея. Полный слепок в момент падения, позволяет сделать больше чем только стектрейс.
Тоже соглашусь, просто мне это было не успело понадобиться.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Post-mortem отладка на Cortex-M