Я использую Rust на Cortex-M4 и использую gdb с openocd для его отладки.
Из C (++) я привык смотреть на стек вызовов, когда происходит исключение (например, аппаратный сбой). Очень полезно увидеть, какая строка вызвала исключение.
Однако в Rust, когда случается паника, стек вызовов почти пуст. Почему это происходит?
Есть ли способ заставить Rust сохранять стек (только для отладчика, мне не нужно его распечатывать)? Или я могу вставить точку останова где-нибудь, где стек вызовов еще не был уничтожен?
Прямо сейчас у меня есть где-то разворачивание, которое вызывает панику, но я не могу найти где, если не прохожу через весь код.
РЕДАКТИРОВАТЬ: это трассировка стека, которую я получаю в обработчике паники:
i stack
#0 rust_begin_unwind (info=0x2001f810) at src\main.rs:122
#1 0x080219dc in cortex_m::itm::write_fmt (port=0x2001f820, args=...) at C:\Users\d.dokter\.cargo\registry\src\github.com-1ecc6299db9ec823\cortex-m-0.6.1\src/itm.rs:128
#2 0x2001f894 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Также странно, что функция write_fmt находится в стеке, поскольку она вызывается внутри обработчика для регистрации паники. Я также считаю, что адрес 0x2001f894 очень подозрительный, потому что это адрес ОЗУ.