.Net - 什么是“unwind”?

9
在回答这个问题时,我注意到在处理异常时尝试移动“光标”时会出现以下对话框:

无法将下一个语句设置为此位置。取消堆栈调用失败。

在以下情况下无法取消堆栈:

  1. 通过即时调试启动调试。
  2. 取消展开正在进行中
  3. 已抛出System.StackOverflowException或System.Threading.ThreadAbortException异常。
那么什么是取消展开
4个回答

21

这是我!

不,这里通常指的是通过堆栈向后/向上步进的过程,依次删除连续的帧直到返回所需级别。典型的堆栈结构非常线性,帧在彼此之后端对端堆叠,因此实际上并没有太多字面上的展开,但这就是它被称为的原因。

这个维基百科页面有更多细节。


2
解绑只是向上移动堆栈。

1

这里的CLR正在“展开”堆栈,以定位具有catch块的方法,该块可以处理异常,即如果当前方法无法处理异常,则返回调用它的方法以查看是否可以处理。 这将重复进行,直到找到处理异常的方法或达到应用程序级错误处理。


0

这意味着存在一个有问题的线程,或者可能是由于堆栈已满且没有创建堆栈帧,CLR在这种情况下选择UNWIND当前上下文。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接