2014-10-10 28 views
1

下面是我的一段代碼,我用它來記錄我的錯誤細節。StackTrace類的方法不工作在發佈模式

StackTrace sTrace = new StackTrace(true); 
string functionname = Environment.NewLine + " MethodName - " + sTrace.GetFrame(1).GetMethod().Name; 
string classname = Environment.NewLine + " File Path - " + sTrace.GetFrame(1).GetFileName() + Environment.NewLine + " Line No. - " + sTrace.GetFrame(1).GetFileLineNumber() + Environment.NewLine + " ClassName - " + sTrace.GetFrame(1).GetMethod().ReflectedType.Name + Environment.NewLine + " DateTime - " + DateTime.Now.ToString(); 
WriteLine(string.Concat("ERROR: ", errMsg, classname, functionname, 
           Environment.NewLine)); 

這部作品在調試模式完美,但在relese模式下,我得到函數名和類名的空白,行號(sTrace.GetFrame(1).GetFileLineNumber())爲0。

是否有任何其他最好的方法來獲取錯誤發生地點的函數名稱,類名稱和行號。

在此先感謝。

+1

看看'StackFrame'的文檔。在那裏你可以看到大多數調試信息僅在使用調試配置構建的程序集中創建。 – Fratyx 2014-10-10 04:44:43

+0

嘗試在Release上突出顯示,並在即時窗口中查看問題。 – DevEstacion 2014-10-10 04:56:42

+0

[在發佈模式下顯示.NET程序集的堆棧跟蹤中的行號]的可能重複(http://stackoverflow.com/questions/628565/display-lines-number-in-stack-trace-for-net-assembly-在釋放模式) – CarbineCoder 2014-10-10 05:08:07

回答

1

StackTrace調試版本配置信息將會提供更多信息。默認情況下,Debug版本包含調試符號,而Release版本則不包含。調試符號包含構建StackFrame和StackTrace對象時使用的大部分文件,方法名稱,行號和列信息。

實際上,釋放模式優化代碼和劑量沒有Program DataBase file(.pdb)

在Relese模式

屬性 - >建設 - >定義調試常數(檢查它)

屬性 - >建設 - >租期,提高代碼(取消檢查)

1

如果您在應用程序中使用.pdb文件,您可以得到它。請檢查this

您可以啓用它:Properties > Linker > Debugging > Generate Debug Info = "Yes"

的註上pdb files

相關問題