Skip to content

Debugging with GDB (ru)

EvilLord666 edited this page Nov 24, 2016 · 1 revision

Например в GCC GDB по адресу в регистре PC, если он имеет "правильное" значение, можно определить точку сбоя, введя в GDB команду list *0xXXXXXXXX

Если сюда вписать адрес из регистра LR То можно узнать место возврата из этой функции, которая сбойнула. Вроде как в регистрах MSP PSP находятся значения последнего стека. Сейчас точно не помню, какой куда показывает, но один из них MSP будет указывать на стек HardFault Handler, а другой (PSP) будет показывать на стек, откуда вывалилось в ошибку. И если глянуть дебагером эту память, можно попробовать размотать его.

Я вот все ищу какую нить реализацию размотки этого стека, но пока не нашел. Если народ подскажет, буду очень рад.

PS: Еще одна полезная команда для GDB info symbol 0xXXXXXXXX Если адрес попадает в сегмент данных - GDB говорит, на какую переменную показывает этот адрес. Или же говорит, в какое место в какую функцию этот адрес показывает - имя функции и смещение в байтах от ее начала.

Clone this wiki locally