2008年11月18日火曜日

[.NET]Exception.StackTraceプロパティ

ちょっとしたコードの書き方の違い何ですが、以下のTest1とTest2メソッドでは、Exception.StackTraceの結果が変わってしまうのです。
Test1ではコールスタックが更新されず、Test2ではコールスタックが初期化されます。

private void Form1_Load(object senderEventArgs e)
{
    try
    {
        Test1();
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine("-----------Test1");
        System.Diagnostics.Debug.WriteLine(ex.StackTrace);
    }
    try
    {
        Test2();
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine("-----------Test2");
        System.Diagnostics.Debug.WriteLine(ex.StackTrace);
    }
}

private void Test1()
{
    try
    {
        ExceptionThrow();
    }
    catch (Exception e)
    {
        throw;
    }
}

private void Test2()
{
    try
    {
        ExceptionThrow();
    }
    catch (Exception e)
    {
        throw e;
    }
}
private void ExceptionThrow()
{
    throw new NotImplementedException();
}


実行結果はこんな感じ。

-----------Test1
   場所 WindowsFormsApplication1.Form1.ExceptionThrow() 場所 C:\Users\hoge\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs: 66
   場所 WindowsFormsApplication1.Form1.Test1() 場所 C:\Users\hoge\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs: 49
   場所 WindowsFormsApplication1.Form1.Form1_Load(Object senderEventArgs e場所 C:\Users\hoge\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs: 23

-----------Test2
   場所 WindowsFormsApplication1.Form1.Test2() 場所 C:\Users\hoge\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs: 61
   場所 WindowsFormsApplication1.Form1.Form1_Load(Object senderEventArgs e場所 C:\Users\hoge\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs: 32

0 件のコメント: