В том участке кода, который по моим предположениям вызывал исключение, я через каждые несколько строчек натыкал вывод на экранчик цифр 1, 2, 3... в одну и ту же позицию. Если всё было хорошо, я должен был видеть последнюю цифру после каждой отработки участка. Допустим, цифру 9. Если бы произошла ошибка, то она была бы после последней цифры, которую я увидел бы на экране.
При обычной работе я действительно видел цифру 9. Однако при соблюдении специфичных условий вместо этой одной цифры -- или какой-либо другой -- я увидел мигание всех цифр по очереди в течение нескольких секунд, а потом МК ушёл в перезагрузку.
У меня что-то зациклилось, что не должно было? Почти. В этом участке кода была запланированная рекурсия. Однако при нормальных обстоятельствах она либо вообще не должна была возникать, либо должна была иметь глубину 1 (один). При рекурсивном вызове у меня всегда передавался параметр, который рекурсию прерывал.
Точнее, я думал, что передавался. Из-за алгоритмической ошибки при некоторых обстоятельствах повторный вызов происходил с тем же параметром, с которым происходил первый. А поскольку обстоятельства не менялись в течение пары секунд, КАЖДЫЙ следующий вызов воспринимался как первый. Рекурсия становилась бесконечной.
Я предполагал выход за границы массива. На самом же деле я имел дело с переполнением стека. Да-да, тот самый stack overflow.