[C#.NET] 追蹤類別–StackTrace

有時我們想要程式裡記錄log,比如記錄目前程式的行號,記錄方法是被哪個方法呼叫,我們可以使用 StackTrace類別 + StackFrame 類別 + MethodBase 類別 來達到我們的需求。這需要兩個命名空間:
System.Diagnostics
System.Reflection

範例如下:

private void Form1_Load(object sender, EventArgs e)
{
    TestMethod();
}

void TestMethod()
{
    string currentName = new StackTrace(true).GetFrame(0).GetMethod().Name;
    string callName = new StackTrace(true).GetFrame(1).GetMethod().Name;
    Trace.WriteLine("目前行號: " + new StackTrace(true).GetFrame(0).GetFileLineNumber().ToString());
    Trace.WriteLine("呼叫名稱: " + callName);
    Trace.WriteLine("目前方法: " + currentName);
    CallMethod();
}

image

  1. GetFrame(0)是指目前方法的堆疊。
  2. GetFrame(1)是指目前方法的上一層堆疊。
  3. 以此類推,看自己需要追蹤到什麼。

我為了精準的記錄目前的行號,我用了

Trace.WriteLine("目前行號: " + new StackTrace(true).GetFrame(0).GetFileLineNumber().ToString());

因為堆疊記錄在實體化的那一刻就已經建立了,觀察以下,我們可以看到第33行所記錄的行號是StackTrace實體化的那一刻的行號30,第34行所記錄的行號方式就是我要的,所以在使用上必須要注意一下。
image

 

StackTrace也可以觀察Exception

image

若有謬誤,煩請告知,新手發帖請多包涵

 

本文转自:http://www.dotblogs.com.tw/yc421206/archive/2010/10/25/18546.aspx

 

 

Translate (翻譯此網頁)

翻译此页

 


Training

MVA


codeplex

CodePlex


Study 4

為技術而學,為學習而生!


twMVC

twMVC


好用工具

mindomo


寫信給我

emailtome


.Net Tools

Software

最新回應

有時我們想要程式裡記錄log,比如記錄目前程式的行號,記錄方法是被哪個方法呼叫,我們可以使用 StackTrace類別 + StackFrame 類別 + MethodBase 類別 來達到我們的需求。這需要兩個命名空間:
System.Diagnostics
System.Reflection

posted @ 2014-02-10 13:21  Net-Spider  阅读(618)  评论(0)    收藏  举报