代码之家  ›  专栏  ›  技术社区  ›  Matt

异常会传回呼叫方法吗?

  •  4
  • Matt  · 技术社区  · 15 年前

    假设我有一个方法

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

    现在假设callme()调用method1(),而method1()又调用method2()。-- 如果method2()引发了一个异常,那么它应该被抛出回method1()的帧,然后该帧将停止自身内部的任何进一步执行,并将从method2()引发的异常传递到callme()的帧,然后返回到原始stackframe?

    如果我正在单步执行代码,会发生同样的情况吗?或者,如果VS2008未在原始方法中处理,它会在看到异常时立即停止吗?

    我抛出了一个异常,但调试程序会抱怨:

    描述:未处理的异常 在执行期间发生 当前Web请求。请查看 有关堆栈跟踪的详细信息 错误及其来源 代码。

    只要我一碰到method2()的右括号。

    我有点困惑,我以为特例应该一路传回来。

    1 回复  |  直到 15 年前
        1
  •  10
  •   Robert Harvey Isaac Blanco    15 年前

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

    • 它被捕获在一个捕获块中
    • 它被全局异常处理程序捕获
    • 它不会被用户代码捕获,并显示一条常规异常消息

    调试时情况稍有不同,因为可以将调试器设置为在未处理的用户异常上中断。这可能就是你的案子发生的事情。检查Visual Studio选项debug/exceptions,以查看调试器是否设置为在任何未处理的异常冒泡并溢出用户代码之前捕获该异常。