我的程序在夜間運行了大約10個小時,有時我醒來發現它已經崩潰(無論出於何種原因)。它通常是一個「程序名稱」已停止工作,並且唯一的按鈕就是關閉該程序。我曾試着觀察並等待它崩潰,但問題似乎很難再現(我無法全天候觀看)。我在可能有問題的地方使用了try和catch語句,並告訴程序在捕獲異常時轉儲到文本文件。但這似乎還不夠好。vb.net在崩潰時運行
TLDR:如果在程序中檢測到異常(無特殊情況)時,是否可以告訴我的程序運行特定函數,以便我可以將堆棧跟蹤轉儲到文本文件並在稍後調查?
我的程序在夜間運行了大約10個小時,有時我醒來發現它已經崩潰(無論出於何種原因)。它通常是一個「程序名稱」已停止工作,並且唯一的按鈕就是關閉該程序。我曾試着觀察並等待它崩潰,但問題似乎很難再現(我無法全天候觀看)。我在可能有問題的地方使用了try和catch語句,並告訴程序在捕獲異常時轉儲到文本文件。但這似乎還不夠好。vb.net在崩潰時運行
TLDR:如果在程序中檢測到異常(無特殊情況)時,是否可以告訴我的程序運行特定函數,以便我可以將堆棧跟蹤轉儲到文本文件並在稍後調查?
這樣做通常不是一個好主意。不過,你可以看看AppDomain.UnhandledException。這幾乎侷限於一個域,並且您還將(可能)收到與您的程序無關的所有未處理異常的通知。
這通常用於類庫,但我認爲有一點小竅門,你可能會得到它的工作。
是否可以告訴我的程序時,已經檢測到異常運行特定的功能...
是的,但具體取決於平臺您正在使用:
如果您有控制檯應用程序,請在Sub Main
附近放置一個大的Try ... Catch
。
如果您使用WPF,請向AppDomain或Dispatcher的UnhandledException
事件添加事件處理程序。具體可以在以下問題上找到:
在您使用的WinForms,你也可以換子主(這可能是自動生成的)或附於AppDomain.UnhandledException,在這裏看到的細節:
爲了完整起見,在Web應用程序全局異常處理在Global.asax中的Application_Error
方法做:
How to catch unhandled exceptions in an asp.net application?
數據格式爲+1 – Wolfish
你看起來應用程序事件日誌文件給了什麼嗎?您也可以在代碼中的特定點處自行輸出日誌,以便在失敗時您將看到它失效的時間和距離。您可能必須多次執行此操作,以查看每次故障是否在同一時刻。目前很少繼續。 – Mych
這是Winforms,WPF還是其他? – phaedra