黃偉榮的學習筆記

軟體的世界變化萬千,小小的我只能在這洪流奮發向上以求立足。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

用System.Diagnostices.StackTrace取得呼叫堆疊資訊。

Posted on 2007-12-27 23:47  黃偉榮  阅读(1343)  评论(0编辑  收藏  举报
    平常在用偵錯時Exception中的StackTrace是我找出問題的一個大資訊,可以知道發生錯誤的地方,是從那一個方法中出錯,是那一個方法呼叫出錯的方法的,沒有這個資訊,將會非常難以除錯,後來在想難到只有Exception中才可以得到這資訊嗎?就用Reflector查看Exception得知原來Exception.StackTrace,其時是呼叫System.Diagnostices.StackTrace的ToString()方法取得資訊的,所以只要平時就算沒有Execption用System.Diagnostices.StackTrace也可以取知呼叫堆疊中的資訊。

建構式
名稱 說明
StackTrace () 從呼叫端的框架來初始化 StackTrace 類別的新執行個體。
StackTrace (Boolean) 從呼叫端的框架來初始化 StackTrace 類別的新執行個體,可以選擇性地擷取來源資訊。
StackTrace (Exception) 使用提供的例外狀況物件初始化 StackTrace 類別的新執行個體。
StackTrace (Int32) 從呼叫端的框架初始化 StackTrace 類別的新執行個體,略過指定的框架數。
StackTrace (StackFrame) 初始化 StackTrace 類別的新執行個體,這個執行個體含有單一框架。
StackTrace (Exception, Boolean) 使用提供的例外狀況物件,及選擇性地擷取來源資訊,來初始化 StackTrace 類別的新執行個體。
StackTrace (Exception, Int32) 使用所提供的例外狀況物件初始化 StackTrace 類別的新執行個體,並跳過指定數量的框架。
StackTrace (Int32, Boolean) 使用呼叫端的框架初始化 StackTrace 類別的新執行個體,並跳過指定數量的框架,亦可選擇性擷取來源資訊。
StackTrace (Thread, Boolean) 為特定執行緒、並選擇性地擷取來源資訊,來初始化 StackTrace 類別的新執行個體。
StackTrace (Exception, Int32, Boolean) 使用所提供的例外狀況物件將 StackTrace 類別的新執行個體初始化,並跳過指定數量的框架,亦可選擇性擷取來源資訊。


公用屬性
名稱 說明
FrameCount 取得堆疊追蹤中的框架數。

公用方法
說明
Equals  多載。 判斷兩個 Object 執行個體是否相等。 (繼承自 Object)。
GetFrame 取得指定的堆疊框架。
GetFrames 傳回目前堆疊追蹤內的所有堆疊框架的複本。
GetHashCode  做為特定型別的雜湊函式。GetHashCode 很適合用在雜湊演算法和資料結構中 (例如雜湊資料表)。 (繼承自 Object)。
GetType  取得目前執行個體的 Type。 (繼承自 Object)。
ReferenceEquals  判斷指定的 Object 執行個體是否為相同的執行個體。 (繼承自 Object)。
ToString 覆寫。 建立堆疊追蹤的可讀取表示。


範例1 取得如Execption中的StackTrace資訊
 class Program
    {
        
static void Main(string[] args)
        {
            test();
        }

        
static void test()
        {
            StackTrace st 
= new StackTrace();
            Console.Write(st.ToString());
            Console.Read();
            
//   輸出
            
//   於 StackTraceTest.Program.test()
            
//   於 StackTraceTest.Program.Main(String[] args)
        }
    }

範例2 取得如Execption中的StackTrace資訊,但有檔案資訊。
    class Program
    {
        
static void Main(string[] args)
        {
            test();
        }

        
static void test()
        {
            StackTrace st 
= new StackTrace(true);
            Console.Write(st.ToString());
            Console.Read();

            
//   輸出
            
//   於 StackTraceTest.Program.test() 於 D:\XX\Program.cs: 行 17
            
//   於 StackTraceTest.Program.Main(String[] args) 於 D:\XX\Program.cs: 行 12
        }
    }

範例3 取得自己的資訊
class Program
    {
        
static void Main(string[] args)
        {
            test();
        }

        
static void test()
        {
            StackTrace st 
= new StackTrace(true);
            Console.Write(st.GetFrame(
0).ToString());
            Console.Read();
        }
    }


後來在上Google搜才知道,原來有一堆關於System.Diagnostices.StackTrace的資訊,為什麼我以前沒看到..