2010-07-21 81 views
0

在處理系統中新數據的線程上,如果數據無效,我會在事件日誌中寫入一條消息,其中包含Environment.StackTrace信息。環境問題.StackTrace

在事件日誌寫入拋出,沒有短信

Message: 
CallStack - at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) 
     at System.Environment.get_StackTrace() 
     at <my method that writes in the event log> 

任何想法,爲什麼發生這種情況的例外?

編輯:我感興趣的是什麼導致Environment.StackTrace拋出異常一般,所以我能理解什麼是我的情況發生

+3

你可以發佈寫入事件日誌並使用'Environment.StackTrace'的代碼嗎? – Oded 2010-07-21 06:05:33

+0

在您記錄消息時,對'Environment.StackTrace'的調用拋出異常。你能發佈足夠的代碼嗎? – shahkalpesh 2010-07-21 06:08:27

+0

這是在一個線程? – leppie 2010-07-21 06:10:12

回答

0

你需要移動到一個單獨的線程之前捕獲堆棧跟蹤。

Stacktrace將只顯示直到線程根部的幀。

+0

是的,我只會看到線程的框架,但爲什麼會拋出異常? – anchandra 2010-07-22 02:47:41

1

@anchandra我不知道你是否已經認識到了這一點,因爲現在已經4歲了。

但是我想補充一下,因爲我自己偶然發現了這個。

那麼,爲什麼Environment.StackTrace引發異常呢?

首先最無趣的答案: 正如你可以在MSDN參考屬性看,它可如果「請求的堆棧跟蹤信息超出範圍」拋出ArgumentOutOfRangeException,還要注意執行上下文必須有System.Security.Permissions.EnvironmentPermission。

現在什麼難倒我一秒鐘: 它不會拋出異常!是的,這就是發生在我身上的事情,它實際上向我返回了一個堆棧跟蹤,它開始列出對Environment.StackTrace的調用,如「在System.Environment.get_StackTrace()」,然後顯示了所有其他調用方法。 因爲我將它記錄到審計日誌中,所以如果你看看它,你會認爲在堆棧的最後一幀出現異常,但事實並非如此,我只是在那時請求堆棧跟蹤,並且堅持它在我的錯誤日誌中,一旦意識到這一點就非常愚蠢。