0
A
回答
3
一般崩潰.NET應用程序是由未處理的異常引起的 - 在一個沒有按某種形式的try-catch塊捕獲該應用程序的線程,即一個例外:
try
{
// Some code that may throw an exception
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
一個良好的第一地方檢查有關此異常的信息是應用程序事件日誌,但是經常會發現.Net框架僅發佈關於崩潰的最少信息 - 如果是這種情況,則需要自己捕獲並處理異常,並將足夠的信息記錄到允許您診斷錯誤。
通常有兩種方式,你可以這樣做:
1.確保你的應用程序的每個線程的代碼包含在一個try-catch塊。
這是最簡單的方法 - 除非您的應用程序有多個用戶線程(您會知道它是否有),這隻需要您在應用程序的入口點放置一個try-catch塊,例如Windows窗體應用程序:
// Probably found somewhere in Program.cs
[STAThread]
static void Main()
{
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
如果你在一個控制檯應用程序的工作,那麼你將需要使用其他的東西比MessageBox
(見第一個例子)。
如果你產生了多個線程,那麼每個線程的入口點方法也應該以類似的方式捕獲所有異常。
2.手柄,只要任何線程拋出當前應用程序域未處理的異常當前應用程序域
此事件的UnhandledException
事件將被解僱。一般而言,最好使用第一種方法,但在某些情況下,此事件仍然有用。
實施例:
static void Main()
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
// The rest of your application
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Console.WriteLine(e.ExceptionObject.ToString());
}
當然是值得指出的是錯誤仍然可能不能由任一上述兩種方法的(這是可能的,如果錯誤是由本機模塊引起抓在相同的過程中加載),但是這應該可以做到這一點。
最後 - 祝你好運!
相關問題
- 1. 調試崩潰(C++)
- 2. 調試崩潰從C++
- 3. 調試windows上的tcl崩潰
- 4. 在Windows下調試JVM崩潰
- 5. Ruby調試器在Windows上崩潰
- 6. 如何調試崩潰的Windows服務?
- 7. 調試Silverlight崩潰
- 8. 調試tomcat崩潰
- 9. 調試Python崩潰
- 10. 調試WP7崩潰
- 11. C#COM應用程序崩潰調試
- 12. 如何調試此C#崩潰?
- 13. 調試winform崩潰 - C#[ADPlus + Windbg]
- 14. iPhone - 調試EXC_BAD_ACCESS崩潰
- 15. 崩潰試圖調用「GooglePlayServicesUtil.isGooglePlayServicesAvailable」
- 16. 等待調試器崩潰?
- 17. 隨機崩潰調試
- 18. iisexpress崩潰無法調試
- 19. iOS如何調試崩潰?
- 20. 調試llvm-ld崩潰
- 21. 如何調試IE8崩潰?
- 22. 程序崩潰調試
- 23. TextInput崩潰 - 如何調試?
- 24. Visual Studio 2013調試崩潰
- 25. devenv.exe調試後崩潰
- 26. GDB調試特定崩潰
- 27. 調試一個SIGSEGV崩潰
- 28. 調試崩潰報告
- 29. 調試Internet Explorer崩潰
- 30. 如何調試GPF崩潰?