0

为什么在调试模式下运行时,此示例中引发的异常报告为 Visual Studio 未处理?

public bool bar(string pVal)
{
     throw new Exception("hello there");
}

public void foo(Func<string,bool> pFunc)
{
    try {
        pFunc("test");
    } catch(Exception) {
        // should be caught
    }
}

// passing bar to foo as a callable causes unhandled exception
foo(bar);

如果我在调试器中运行它,那么抛出的异常bar()是未处理的。调试器将在异常停止后继续捕获。

foo()在单元测试中编写了一个函数来帮助自动化异常测试,但它不起作用。有人可以解释为什么这不起作用,以及是否可以修复它。

4

3 回答 3

3

我尝试了一个快速测试,发现异常捕获:

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            foo(bar);

            Console.ReadKey();
        }

        public static bool bar(string pVal)
        {
            throw new Exception("hello there");
        }

        public static void foo(Func<string, bool> pFunc)
        {
            try
            {
                pFunc("test");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: "+ ex.Message);
            }
        }
    }
}

在此处输入图像描述

于 2013-11-12T13:35:03.057 回答
1

您可以在 Ctrl+Alt+E 中关闭异常中断

于 2013-11-12T13:36:47.003 回答
1

当抛出异常时,您的调试器可能会中断。这将导致您报告的行为。您可以改为将调试器配置为仅在用户处理的异常上中断。

在 Debug-->Exceptions 下查看。对话框如下所示: VS 调试异常对话框

你可以在这里阅读更多关于它的信息。

于 2013-11-12T13:43:34.893 回答