簡體   English   中英

在.NET中處理粗暴的應用程序中止

[英]Handling rude application aborts in .NET

我知道即使問這個問題,我也開始自己開火了,但我想我會看看StackOverflow是否有解決我遇到的問題的方法......

我有一個C#應用程序在客戶端站點失敗,我無法在本地重現。 不幸的是,我很難(不可能)獲得任何有助於隔離問題根源的信息。

我有一個相當廣泛的錯誤監控框架,它在所有常見的地方監視未處理的異常:

  • 我控制的線程中的Backstop異常處理程序
  • WinForms異常的Application.ThreadException
  • AppDomain.CurrentDomain.UnhandledException

在我可以訪問它們的地方記錄詳細信息。

這在過去非常有用,可以識別生產代碼中的問題,但是沒有向我提供有關當前一系列問題的任何信息。

我最好的猜測是,核心問題是“粗魯”異常類型之一(線程中止,內存不足,堆棧溢出,訪問沖突等),這些異常類型正在逐步升級為嚴重關閉有機會看到發生了什么。

我可以對快照信息做些什么,因為我的進程崩潰會有用嗎? 理想情況下,我可以寫出我的自定義日志格式,但如果我能有一種可靠的方法來確保在某處寫入崩潰轉儲,我會很高興。

我希望我可以實現從CriticalFinalizerObject派生的類,並在它處理時吐出最后機會錯誤注銷,但這似乎並沒有在我測試的StackOverflow場景中觸發。

由於缺少代碼簽名證書,我無法使用Windows錯誤報告和朋友。

我不是試圖從任意異常中“恢復”,我只是想記下下去的路上出了什么問題。

有任何想法嗎?

您可以嘗試創建一個minidump文件。 這是一個C ++ API,但應該可以編寫一個小的C ++程序來啟動應用程序,保持對進程的處理,等待進程句柄,然后在應用程序死亡時使用進程句柄創建一個minidump。

如果你做了你聲稱的:

  • 在Application.Run上嘗試捕獲
  • 未處理的域例外
  • 未處理的線程異常
  • 嘗試在所有線程中捕獲處理程序

然后你可能已經捕獲了異常, 除非它被第三方或COM組件拋出。

你當然沒有提供足夠的信息。

  • 客戶說什么事件導致異常?
  • 您使用哪些COM或第三方組件? (您是否正確實例並引用了這些組件?您是否將有效參數傳遞給COM函數調用?)
  • 您是否使用任何未經管理的 - 不安全的代碼?
  • 你是否肯定你有所有使用try-catch覆蓋的可投擲電話?

我只是說沒有人可以為你提供任何有用的建議,除非你發布更多的信息,甚至我們可能只能推測你的問題來源。

有一套新鮮的眼睛看你的代碼。

記錄無法捕獲某些錯誤。

有關詳細信息,請參閱此類似問題:

.NET中的StackOverflowException

這是一個解釋異步異常的鏈接(以及為什么你無法從它們中恢復):

http://www.bluebytesoftware.com/blog/PermaLink.aspx?guid=c1898a31-a0aa-40af-871c-7847d98f1641

暫無
暫無

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

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