2010-03-03 98 views
8

當顯示異常(或更一般 - 當它轉換爲字符串時)堆棧跟蹤顯示。我想要做的是更改此類跟蹤中顯示的源代碼文件路徑的格式。如何在C#中格式化異常的堆棧跟蹤?

具體而言,我想只留下文件名(沒有完整路徑)或只顯示以項目的基本目錄開頭的那部分路徑。完整路徑通常是不必要的,並且使整個消息混亂。

我該怎麼做?

回答

23

我問了一個類似的問題,雖然不完全一樣,在這裏:Print stack trace information in C#

你可以做的是這樣的:

var trace = new System.Diagnostics.StackTrace(exception); 

它給你一個StackTrace對象,爲您提供所需的所有信息。在我的情況下,它是關於避免必須處理本地化的異常文本,但我想你可以使用相同的方法滿足您的需求。


編輯:我注意到,我添加了相關的「needFileInfo」參數構造函數的accepted answer我的問題的註釋。我在這裏看到這個構造函數:StackTrace(Exception e, bool fNeedFileInfo),我現在找不到有問題的實際代碼,但我想你需要將true傳遞給該參數。我想實驗是這裏的關鍵。

換句話說,我猜的代碼應該是這樣的:

var trace = new System.Diagnostics.StackTrace(exception, true); 
+1

+1關於StackTrace類的小貼士。我從來不知道它可能會將異常作爲構造函數參數! – Josh

+0

這與'exception.StackTrace'有什麼不同? –

+4

Exception.StackTrace是一個字符串,它是一個類,它可以編程訪問堆棧跟蹤的各個部分,包括文件名,行號,類名等,而不是單個字符串。 –

2

退房的System.Diagnostics.StackFrame類和GetFileName方法。您可以編寫一個方法來獲取堆棧跟蹤以及可以在異常處理程序中調用的源文件的名稱。