В Си и микроконтроллерах не силен, так что прошу сильно не пинать.
Ситуация в следующем: имею зависший (логически, иначе вотчдог перезапустил бы) микроконтроллер. Прошивка написана на Си. Подключился отладчиком, поставил выполнение на паузу и смотрю состояние переменных в памяти. В большом количестве инициализированных, глобальных переменных (как правило контексты модулей) содержится какая-то белиберда. Прихожу к выводу что где-то обращаюсь к несуществующим элементам одного из буферов. Обнаружить методом тыка и сравнение адресов переменных не удалось, программа достаточно большая.
Микроконтроллер: nRF52840
IDE: Segger embedded studio
Вопросы:
1. Как обычно ищут такие ошибки?
2. Ситуация случается достаточно редко, можно ли как-то снять дам памяти для дальнейшего анализа? Точно знаю что можно с помощью nrfutil, но как с этим работать дальше - непонятно.
3. Может быть есть какие-то инструменты для визуализации памяти (переменных в ней), благо весь мой код без динамического выделения памяти.
4. Может быть есть какие-то инструменты, которые статическим анализом кода могут находить подобные ситуации.
С вашей ide не знаком, но обычно отладчик самостоятельно указывает на подобные места. Но вы можете разбить свой код пополам и поставить точку останова. Затем сделать тоже самое с зависшей половиной. И так до тех пор, пока не найдёте строчку.