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崩溃?