2016-12-05 78 views
1

Exception對象具有StackTrace屬性。但它只是一個字符串。從異常中獲取實際StackTrace對象

有沒有辦法從Exception得到實際的System.Diagnostics.StackTrace對象?

我問,因爲我從UnhandledExceptionEventHandler獲取Exception對象,並且我無權訪問生成異常以獲取實際堆棧跟蹤的幀。

+1

使用一些'StackTrace' [構造]的(https://msdn.microsoft.com/en-us/library/25h0kw08(V = vs.110)的.aspx)與'Exception'參數?例如'新的StackTrace(ex)'。 –

+0

[This](http://stackoverflow.com/questions/21479762/exception-with-no-stack-trace-how)問題似乎相關;如果真的,你的堆棧跟蹤已經消失了,你需要修復任何'throw ex'調用。請注意,如果是這種情況,那麼@ IvanStoev的答案不應該工作,因爲'ex'已經缺少堆棧跟蹤,所以我不認爲'StackTrace'構造函數會找到任何要複製的東西。見[這裏](http://stackoverflow.com/questions/57383/in-c-how-can-i-rethrow-innerexception-without-losing-stack-trace)如何重新拋出異常而不會丟失在.NET 4.5+中的堆棧跟蹤。 – Quantic

+0

@Quantic - 感謝您的迴應,但PALMERALE和IvenStoev的解決方案似乎效果很好。 – Vaccano

回答

1
try{ 
//some code 
} 
catch (Exception ex){ 
    System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(ex); 
} 
+0

完美的作品!在'ex'之後加上',true'也可以獲得文件信息! – Vaccano

相關問題