[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
若有謬誤,煩請告知,新手發帖請多包涵
本文转自:http://www.dotblogs.com.tw/yc421206/archive/2010/10/25/18546.aspx
每月文章
- 2014年2月 (5)
- 2014年1月 (8)
- 2013年12月 (7)
- 2013年11月 (7)
- 2013年10月 (10)
- 2013年9月 (4)
- 2013年8月 (9)
- 2013年7月 (15)
- 2013年6月 (12)
- 2013年5月 (24)
- 2013年4月 (9)
- 2013年3月 (10)
- 2013年2月 (1)
- 2013年1月 (7)
- 2012年12月 (4)
- 2012年11月 (2)
- 2012年10月 (8)
- 2012年9月 (5)
- 2012年8月 (15)
- 2012年7月 (2)
- 2012年6月 (13)
- 2012年5月 (11)
- 2012年4月 (6)
- 2012年3月 (13)
- 2012年2月 (6)
- 2012年1月 (7)
- 2011年12月 (7)
- 2011年10月 (8)
- 2011年9月 (2)
- 2011年8月 (7)
- 2011年7月 (6)
- 2011年6月 (15)
- 2011年5月 (7)
- 2011年4月 (7)
- 2011年3月 (7)
- 2011年2月 (4)
- 2011年1月 (20)
- 2010年12月 (18)
- 2010年11月 (6)
- 2010年10月 (7)
- 2010年9月 (4)
- 2010年8月 (2)
- 2010年7月 (9)
- 2010年6月 (8)
- 2010年5月 (28)
- 2010年4月 (5)
- 2010年3月 (7)
- 2010年2月 (8)
- 2010年1月 (4)
- 2009年12月 (10)
- 2009年11月 (21)
- 2009年10月 (19)
- 2009年8月 (15)
- 2009年7月 (23)
- 2009年6月 (10)
- 2009年5月 (4)
- 2009年4月 (20)
- 2009年3月 (9)
- 2009年2月 (8)
- 2009年1月 (23)
- 2008年12月 (9)
- 2008年11月 (30)
- 2008年10月 (14)
文章分類
- .NET (12)
- .Net Tools (15)
- 《Food》饕饕不絕 (2)
- Active Directory (7)
- ADO.NET (37)
- ASP.NET (11)
- C#.NET (382)
- Entity Framework (7)
- Every8D (2)
- InfoPath 2007 (27)
- Infopath 2010 (18)
- IP Location (2)
- JAVA (10)
- Life (3)
- LINQ (9)
- Modbus (15)
- Office VBA (33)
- Sharepoint 2010 (12)
- Sharepoint 2013 (11)
- SharePoint Web Part (7)
- Skype (1)
- SoftWare (10)
- TCP Socket (10)
- TFS 2010 (16)
- TFS 2012 (7)
- TFS 2013 (14)
- Thread (24)
- TPL (15)
- User Control (17)
- VB.NET (123)
- VB6 (30)
- Visual Studio 2010 (17)
- Visual Studio 2012 (10)
- Visual Studio 2013 (4)
- VSTO (1)
- WCF (18)
- Web API (6)
- Windows (19)
- Windows 2012 (7)
- Windows Azure (7)
- WinForm (38)
- Workflow (4)
- WPF (10)
- XML (5)
.Net
.Net Tools
JAVA
Software
Windows
管理
最新回應
- re: [VB6] [VB.Net][C#.Net] 使用DoEvents時,降低CPU Loading的方法 "所以sleep 1就是休息0.01 Sec" 應該改成: &q....
- by Weil Jimmer
- re: [Visual Studio 2010] 使用 Modeling UML 類別圖進行 正/反 向工程 反向工程的时候,为什么我拉不进去呢
- by 11
- re: [Visual Studio 2012] Web Deploy Service 安裝 & 發佈 to rex : 因為administrator是眾所皆知的帳號,會被攻擊 因為我被攻....
- by 余小章
- re: [Windows Azure] 我在雲端的第一隻 Web Service 應用程式 2010 的sdk 怎么没有了啊
- by limeng
- re: [Visual Studio 2012] Web Deploy Service 安裝 & 發佈 請問加入admin群組和使用admin帳號有什麼不同?
- by rex
- re: [C#.NET] 為了避免濫用 #if,使用 Conditional 屬性可以讓你降低錯誤發生 文章写的不错,但是,如何用Conditional来表示非DEBUG状态下可以运行呢?
- by Eric
- re: [C#.NET] 字串 codepage 轉碼處理 余Sir你好,想請問一下我日前在閱讀有關編碼方面的知識, 試著在控制台撰寫了以下代碼 ....
- by 阿昌
- re: [VBA] Call JavaScript method in VBA to weichang : see javaScript
- by 余小章
- re: [VBA] Call JavaScript method in VBA 余大您好! 我最近在撰寫VBA抓取網頁資料的程式 但我對抓取網頁資料的語法不是很熟悉 ....
- by weichang
- re: [C#.NET] 使用 using 或 try/finally 清理資源 非常感謝 寫得很清楚!
- by kevinya
有時我們想要程式裡記錄log,比如記錄目前程式的行號,記錄方法是被哪個方法呼叫,我們可以使用 StackTrace類別 + StackFrame 類別 + MethodBase 類別 來達到我們的需求。這需要兩個命名空間:
System.Diagnostics
System.Reflection







浙公网安备 33010602011771号