.Net - что такое “размотка”?
-
18-09-2019 - |
Вопрос
Отвечая это вопрос Я заметил, что я получил следующее диалоговое окно при попытке переместить "курсор" во время обработки исключения:
Не удалось установить следующую инструкцию в это местоположение.Попытка размотать стек вызовов завершилась неудачей.
Разматывание невозможно в следующих сценариях:
- Отладка была начата с помощью отладки "Точно в срок".
- В процессе расслабления
- Система.Исключение StackOverflowException или System.Обработка потоков.Было вызвано исключение ThreadAbortException.
Что именно представляет собой размотать?
Решение
Это я!
Нет, в данном контексте это обычно относится к процессу пошагового перемещения ("назад" / "вверх") по стеку, удаляя последовательные кадры, пока вы не вернетесь к желаемому уровню.Типичные стеки (конечно) очень линейны по своей структуре, фреймы располагаются впритык друг к другу, так что на самом деле происходит не так уж много буквального разматывания, но именно так это и называется.
Эта страница в Википедии имеет более подробную информацию.
Другие советы
Разматывание - это просто перемещение обратно вверх по стеку.
Это когда среда CLR "разматывает" стек, чтобы найти метод с блоком catch, который может обрабатывать исключение, т. е.если текущий метод не обрабатывает исключение, он затем возвращается к методу, который его вызвал, чтобы посмотреть, обработает ли он.Это повторяется до тех пор, пока он либо не найдет метод для обработки исключения, либо не перейдет к обработке ошибок на уровне приложения.
Это означает, что существует неисправный поток или, возможно, это связано с тем, что стек заполнен и фрейм стека не создан, среда CLR as решает размотать текущий контекст в этой ситуации.