.NET - что такое “раскручивание”?

При ответе на этот вопрос я заметил, что получил следующее диалоговое окно при попытке переместить "курсор", в то время как исключение обрабатывалось:

Не удалось установить следующий оператор на это местоположение. Попытка раскрутить стек вызовов перестала работать.

Раскручивание не возможно в следующих сценариях:

  1. Отладка была запущена через Своевременную отладку.
  2. Раскручивание происходит
  3. Система. StackOverflowException или Система. Поточная обработка. Исключение ThreadAbortException было выдано.

Что такое точно раскручивание?

7
задан Community 23 May 2017 в 10:30
поделиться

4 ответа

Это я!

Нет, в данном контексте это обычно относится к процессу шага ("назад"/"вверх") через стек, удаляя последовательные кадры до тех пор, пока вы не вернетесь на желаемый уровень. Типичные стеки (конечно) очень линейны по своей структуре, кадры складываются друг за другом из конца в конец, так что на самом деле никакого буквального разматывания не происходит, но так это называется.

Эта страница Википедии имеет более детальную информацию.

.
16
ответ дан 6 December 2019 в 10:50
поделиться

Здесь CLR "разматывает" стек, чтобы найти метод с блоком catch, который может обрабатывать исключение, т.е. если текущий метод не обрабатывает исключение, то он возвращается к методу, который вызвал его, чтобы узнать, будет ли он обрабатывать исключение. Это повторяется до тех пор, пока он не найдет метод для обработки исключения или не выполнит обработку ошибок на уровне приложения.

.
1
ответ дан 6 December 2019 в 10:50
поделиться
[

] Размотка просто возвращается обратно в стек. [

]
1
ответ дан 6 December 2019 в 10:50
поделиться
[

] Это означает, что есть неисправный поток или, вероятно, это из-за того, что стек полон и не создается кадр стека, CLR в качестве опции UNWIND текущего контекста в этой ситуации.[

]
0
ответ дан 6 December 2019 в 10:50
поделиться