我可以在堆棧跟蹤中拋出一些文本嗎?在堆棧跟蹤中寫入
我的應用程序已經掌握了拋出的異常。但想獲得更多關於某些方法(參數)的信息。
當時的想法是做類似
StackTrace.Insert (0, "argument:" + test);
我知道這是不是很酷,但是這可能嗎?
我可以在堆棧跟蹤中拋出一些文本嗎?在堆棧跟蹤中寫入
我的應用程序已經掌握了拋出的異常。但想獲得更多關於某些方法(參數)的信息。
當時的想法是做類似
StackTrace.Insert (0, "argument:" + test);
我知道這是不是很酷,但是這可能嗎?
創建例外,並將參數放入Data dictionary property。然後拋出異常......
做了它的答案,因爲我的評論被投票有用,我認爲這是一個答案比評論更多。 – erikH
非常好。關鍵是拋出這個新創建的異常,否則StackTrace將不會被填充。 – puddinman13
根據定義,堆棧跟蹤是程序中當前執行點處的活動堆棧幀的輸出,通常通過Exception來訪問。
@David Yaw給你正確的方式來添加額外的信息到堆棧跟蹤,因爲它冒泡了異常堆棧。換句話說,當它是異常的結果時,您應該只將自定義數據添加到堆棧跟蹤中。
要麼創建一些可集中訪問的List集合來存儲日誌數據,要麼按照David的建議,使用異常冒泡的正確try/catch。例如
。
try
{
doSomethingThatMightFailAndThrowAnException();
}
catch (Exception ex)
{
throw new Exception("Here is some custom data to add to the trace...",ex);
// Notice adding the ex as the second parameter preserves the original exception trace
}
只需添加到@ erikH的出色答卷:
除了使用Data
屬性,如果你需要更多的數據可高達異常鏈,您可以通過以下方式這樣做自定義異常。除了自定義類型可以提供的元信息(CommunicationException
可能意味着I/O問題,InvalidStateException
可能意味着程序遇到無效狀態,等等),您可以將附加信息添加到自定義字段的形式。當您需要Data
屬性不提供的類型安全時,自定義字段特別有用。
這樣就足夠了嗎?拋出新的InvalidOperationException(「argument1:」+ test +「,argument2:」+ test2);' –
但它會停止我的方法,不是嗎? –
解決方案是否可以創建異常,並將參數放入[數據字典屬性](http://msdn.microsoft.com/en-us/library/system.exception.data(v = vs.100)的.aspx)? (然後拋出異常...) – erikH