2

当我有以下代码时:

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 异常。

4

2 回答 2

3

第一次机会异常消息的意思就是它所说的,第一次机会异常

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

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

于 2013-03-14T13:38:16.333 回答
0

A first chance exception意味着某些方法引发了异常。现在您的代码有机会处理它。

似乎它CallToMethodWhichThrowsAnyException已经在处理CustomException从它内部的某个地方抛出,这就是你没有抓住它的原因。

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

    catch (Exception ex)
    {
        throw new CustomException(ex.Message, ex); // notice the second argument
    }
于 2013-03-14T13:29:37.563 回答