与 "C++ 异常是如何工作的(背后的过程)" 相同,但是针对的是 C#。 我知道在抛出异常时必须执行以下步骤。 查找最近的异常处理程序类型; 卸载堆栈直到处理程序级别; 调用处理程序; 查找并调用每个 finally 块。 .NET 如何处理这些操作? "当前" 处理程序的映射如何工作? 在 try/catch 块中会发出多少代码? throw 块中会发出多少代码?
.NET异常使用底层的Windows结构化异常处理实现,但这并非必须。Mono可能采用不同的方式。 事实上,如果您编写一个仅抛出异常的单行控制台应用程序,并在Windbg中运行它,您将看到钩入未受管控异常处理的过程。