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 に答える