在回答这个问题时,我注意到在处理异常时尝试移动“光标”时出现以下对话框:
无法将下一条语句设置为此位置。展开调用堆栈的尝试失败。
在以下情况下无法展开:
- 调试是通过即时调试开始的。
- 放松正在进行中
- 已引发 System.StackOverflowException 或 System.Threading.ThreadAbortException 异常。
究竟什么是放松?
在回答这个问题时,我注意到在处理异常时尝试移动“光标”时出现以下对话框:
无法将下一条语句设置为此位置。展开调用堆栈的尝试失败。
在以下情况下无法展开:
- 调试是通过即时调试开始的。
- 放松正在进行中
- 已引发 System.StackOverflowException 或 System.Threading.ThreadAbortException 异常。
究竟什么是放松?
是我!
不,在这种情况下,它通常是指通过堆栈步进(“向后”/“向上”)的过程,删除连续的帧,直到您回到所需的级别。典型的堆栈(当然)在它们的结构中是非常线性的,帧是首尾相连的,所以实际上并没有太多的文字展开,但这就是它的名字。
这个维基百科页面有更多细节。
展开只是向后移动堆栈。
CLR 在这里“展开”堆栈,以便找到具有可以处理异常的 catch 块的方法,即如果当前方法不处理异常,则返回到调用它的方法以查看它是否会. 重复此操作,直到找到处理异常的方法或达到应用程序级别的错误处理。
这意味着有一个错误的线程,或者可能是因为堆栈已满并且没有创建堆栈帧,CLR 在这种情况下选择 UNWIND 当前上下文。