簡體   English   中英

如何使.NET 4拋出ExecutionEngineException?

[英]How to cause .NET 4 to throw ExecutionEngineException?

我們的應用程序有時會引發ExecutionEngineException 我認為當它發生時,應用程序應該崩潰,但它不會崩潰。 即使事件查看器聲稱應用程序已終止 - 它仍繼續運行! 只是看起來有問題的線程被靜默殺死。

問題是我們無法在發生時重新創建條件 - 可疑代碼在異常發生之前執行了數千次。 日志中沒有任何內容。 簡而言之 - 我們感到困惑。

我希望能夠隨意生成此異常,以便了解應用程序在發生時的行為方式。 當然,它必須由框架本身throw new ExecutionEngineExceptionthrow new ExecutionEngineException不計算。

所以,我的問題是 - 我怎樣才能可靠地引起它? 請提供代碼示例。

我們在.NET 4上,很快就轉向.NET 4.5

MSDN文檔

在某些情況下,當應用程序或運行它的系統負載很重時,以.NET Framework為目標的應用程序可能會在垃圾回收期間拋出ExecutionEngineException異常。 在這種情況下,要解決此問題,可以通過修改應用程序的配置文件來禁用並發垃圾回收。 有關更多信息,請參見如何:禁用並發垃圾收集

如果MSDN文檔建議的解決方法不適合您,則必須根據您對軟件的了解進行測試。

現在,創建一個模擬真實應用程序的負載,多線程行為和內存消耗的測試應用程序是一回事 - 使用實際軟件作為測試軟件可能更好(可能增加了一些額外的調試日志+測試代碼) 。 這意味着,遺憾的是這里沒有代碼示例:(

要使負載測試有意義,您還需要在測試系統上運行這些測試,該測試系統具有與生產系統非常相似(如果不是相同的)硬件/軟件配置。 只有這樣,您才能確定您的ExecutionEngineException是由GC還是由其他損壞的運行時引起的。

除非重現問題(即使必須在生產環境中執行此操作),否則不能輕易導致ExecutionEngineException。 Microsoft具有DebugDiag等實用程序,可以幫助您在發生此類異常時捕獲完整的內存轉儲,

http://blogs.msdn.com/b/chaun/archive/2013/09/15/steps-to-trigger-a-user-dump-of-a-process-with-debugdiag-1-2-when-一個特定的凈例外是,thrown.aspx

通過轉儲分析,很容易找到罪魁禍首。 不要指望你的日志可以告訴你,因為當這個異常發生時CLR崩潰,你的日志永遠不會那么深。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM