2014-07-15 263 views
1

我的程序在夜間運行了大約10個小時,有時我醒來發現它已經崩潰(無論出於何種原因)。它通常是一個「程序名稱」已停止工作,並且唯一的按鈕就是關閉該程序。我曾試着觀察並等待它崩潰,但問題似乎很難再現(我無法全天候觀看)。我在可能有問題的地方使用了try和catch語句,並告訴程序在捕獲異常時轉儲到文本文件。但這似乎還不夠好。vb.net在崩潰時運行

TLDR:如果在程序中檢測到異常(無特殊情況)時,是否可以告訴我的程序運行特定函數,以便我可以將堆棧跟蹤轉儲到文本文件並在稍後調查?

+1

你看起來應用程序事件日誌文件給了什麼嗎?您也可以在代碼中的特定點處自行輸出日誌,以便在失敗時您將看到它失效的時間和距離。您可能必須多次執行此操作,以查看每次故障是否在同一時刻。目前很少繼續。 – Mych

+0

這是Winforms,WPF還是其他? – phaedra

回答

1

這樣做通常不是一個好主意。不過,你可以看看AppDomain.UnhandledException。這幾乎侷限於一個域,並且您還將(可能)收到與您的程序無關的所有未處理異常的通知。

這通常用於類庫,但我認爲有一點小竅門,你可能會得到它的工作。

4

是否可以告訴我的程序時,已經檢測到異常運行特定的功能...

是的,但具體取決於平臺您正在使用:

  • 如果您有控制檯應用程序,請在Sub Main附近放置一個大的Try ... Catch

  • 如果您使用WPF,請向AppDomain或Dispatcher的UnhandledException事件添加事件處理程序。具體可以在以下問題上找到:

    WPF global exception handler

  • 在您使用的WinForms,你也可以換子主(這可能是自動生成的)或附於AppDomain.UnhandledException,在這裏看到的細節:

    WinForms Global Exception Handling?

  • 爲了完整起見,在Web應用程序全局異常處理在Global.asax中的Application_Error方法做:

    How to catch unhandled exceptions in an asp.net application?

+0

數據格式爲+1 – Wolfish