-
Notifications
You must be signed in to change notification settings - Fork 0
Debugging with GDB (ru)
Например в GCC GDB по адресу в регистре PC, если он имеет "правильное" значение, можно определить точку сбоя, введя в GDB команду list *0xXXXXXXXX
Если сюда вписать адрес из регистра LR То можно узнать место возврата из этой функции, которая сбойнула. Вроде как в регистрах MSP PSP находятся значения последнего стека. Сейчас точно не помню, какой куда показывает, но один из них MSP будет указывать на стек HardFault Handler, а другой (PSP) будет показывать на стек, откуда вывалилось в ошибку. И если глянуть дебагером эту память, можно попробовать размотать его.
Я вот все ищу какую нить реализацию размотки этого стека, но пока не нашел. Если народ подскажет, буду очень рад.
PS: Еще одна полезная команда для GDB info symbol 0xXXXXXXXX Если адрес попадает в сегмент данных - GDB говорит, на какую переменную показывает этот адрес. Или же говорит, в какое место в какую функцию этот адрес показывает - имя функции и смещение в байтах от ее начала.