[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();
}
- GetFrame(0)是指目前方法的堆疊。
- GetFrame(1)是指目前方法的上一層堆疊。
- 以此類推,看自己需要追蹤到什麼。
我為了精準的記錄目前的行號,我用了
Trace.WriteLine("目前行號: " + new StackTrace(true).GetFrame(0).GetFileLineNumber().ToString());
因為堆疊記錄在實體化的那一刻就已經建立了,觀察以下,我們可以看到第33行所記錄的行號是StackTrace實體化的那一刻的行號30,第34行所記錄的行號方式就是我要的,所以在使用上必須要注意一下。
StackTrace也可以觀察Exception
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET