Pull to refresh

Comments 8

Так где и какая ошибка-то была с массивом вашим?

А, там по классике — пока другое исправлял, та ошибка нашлась и минидамп не успел пригодиться.
Как оказалось, я серверу кидал некорректный запрос и сервер мне возвращал свой собственный стектрейс :) Который мне массив для ответа и переполнял.

В принципе, если вы знаете регионы памяти где лежит код программы, то вы можете фильтровать ваш выхлоп стека и выводить только те, которые находятся в пределах этого региона. Тогда вы получите более-менее похожее на настоящий стектрейс.

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

Я, кстати, не уверен какие артефакты генерит Keil во время сборки, но если есть наряду с бинарем на прошивку какой-нибудь elf с отладочной информацией (или без неё, неважно), то можно довольно быстро набросать скрипт на питоне, который подставляет имена функций вместо адресов. Можно даже написать, чтобы он делал это on the fly, то есть читал бы uart, находил бы стектрейс, заменял адреса на имена функций и выводил бы дальше в файл или std out.

Да, обычный кейловский бинарь axf это вроде просто elf. Но вот как раз на мысли парсить артефакты мне резко захотелось забить.

>> Адрес возврата из текущей функции находится в регистре LR
В общем случае неверно, сильно зависит от компилятора и опций оптимизации. Например фукнция вызывает две фукнции, псевдокод:

push lr
bl A
<- тут lr не содержит корректный адрес возврата для этой функции
bl B
pop pc


Оптимизатор вообще творит всякое что не запрещено.

Вообще, если памяти не запредельное количество — делать полный дамп озу и регистров хорошая идея. Полный слепок в момент падения, позволяет сделать больше чем только стектрейс.
В общем случае неверно, сильно зависит от компилятора и опций оптимизации.

Соглашусь, но если коллстек строит IDE, то это не принципиально. А руками стек разбирать мне все равно не очень хочется.


Вообще, если памяти не запредельное количество — делать полный дамп озу и регистров хорошая идея. Полный слепок в момент падения, позволяет сделать больше чем только стектрейс.

Тоже соглашусь, просто мне это было не успело понадобиться.

Sign up to leave a comment.

Articles