异常会传递回调用方法吗?

4

假设我有一个方法:

try {
callme();
}
catch
{
// handle callme exception
}

现在假设callme()调用method1(),然后method1()又调用method2()--如果method2()抛出异常,它应该被抛回到method1()的框架中,这将停止其内部的任何进一步执行,并将从method2()抛出的异常传递给callme()的框架,然后返回到原始堆栈帧吗?
如果我正在通过代码进行步进操作,是否会发生相同的情况?或者如果在源方法中未处理异常,VS2008会在看到异常时立即停止吗?
我正在抛出异常,但是调试器却抱怨:
描述:在当前Web请求执行期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的起源的更多信息。
一旦我达到method2()的结束括号,就会出现此问题。
我有点困惑,我认为异常应该被完全传递回来。

2
如果你不处理它们(或像你的例子中那样吞咽它们),它们就会存在问题。 - BlackTigerX
1个回答

11

运行时,异常将沿着调用堆栈冒泡,直到发生以下情况之一:

  • 在 Catch 块中捕获
  • 被全局异常处理程序捕获
  • 未被用户代码捕获且显示通用异常消息

调试时情况有所不同,因为可以设置调试器以在未处理的用户异常上中断。这可能是您遇到的情况。检查 Visual Studio 选项 Debug / Exceptions,看看调试器是否设置为在用户代码之前捕获任何未处理的异常并使其冒泡出去。


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