平常在用偵錯時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 取得堆疊追蹤中的框架數。

公用方法
說明
  多載。 判斷兩個 執行個體是否相等。 (繼承自 )。
GetFrame 取得指定的堆疊框架。
GetFrames 傳回目前堆疊追蹤內的所有堆疊框架的複本。
  做為特定型別的雜湊函式。 很適合用在雜湊演算法和資料結構中 (例如雜湊資料表)。 (繼承自 )。
  取得目前執行個體的 。 (繼承自 )。
  判斷指定的 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的資訊,為什麼我以前沒看到..用System.Diagnostices.StackTrace取得呼叫堆疊資訊。

    

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-15
  • 2022-12-23
  • 2021-08-09
  • 2022-12-23
  • 2022-12-23
  • 2021-06-12
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-12-11
  • 2021-06-18
  • 2021-06-23
  • 2022-12-23
相关资源
相似解决方案