Visual Studio不会停止抛出异常

时间:2013-03-14 13:23:31

标签: c#

当我有以下代码时:

public class Entry
{
    public void Main()
    {
        var p = new Class1();
    }
}

public class Class1
{
    public Class1()
    {
        DoSomething();
    }

    private void DoSomething()
    {
        try
        {
            CallToMethodWhichThrowsAnyException()
        }
        catch (Exception ex)
        {
            throw new CustomException(ex.Message); // where CustomException is simple System.Exception inherited class
        }
    }
}

为什么我的CustomException不会被抛出并在Entry.Main或Class1的构造函数(或我的DoSomething方法)中停止执行调试?

即时窗口中只有消息A first chance exception of type 'MyLibrary.CustomException' occurred in MyLibrary.dll

设置Visual Studio的异常设置,仅在用户未处理时抛出所有CLR异常。

2 个答案:

答案 0 :(得分:2)

第一次机会异常消息的含义正是它所说的First chance exception

在您的情况下,它很可能意味着您已将调试器配置为不停止此类异常。由于这是自定义异常类型,因此这是默认行为。

要启用第一次机会中断,请转到Debug -> Exceptions并选择希望调试器中断的异常类型。

答案 1 :(得分:0)

A first chance exception表示某些方法引发了异常。现在你的代码有机会处理它。

似乎CallToMethodWhichThrowsAnyException已经处理了从其中某处抛出的CustomException,这就是为什么你没有抓住它。

此外,在重新抛出时,您应该包装原始异常,以便不会丢失堆栈跟踪信息:

    catch (Exception ex)
    {
        throw new CustomException(ex.Message, ex); // notice the second argument
    }