2012-07-31 80 views
-1

用户报告说,他们从没有任何错误的应用程序退出,我有很多这样的错误在事件查看器:用户退出没有任何异常

事件类型clr20r3,P1 MAIN.EXE,P2 1.0.0.0,P3 4f6b05ad,P4 system.drawing,P5 2.0.0.0,P6 4333aeaf,P7 17e,P8 20,P9 system.argumentexception,P10 NIL。

的EventType clr20r3,P1 MAIN.EXE,P2 1.0.0.0,P3 4f6b05ad,P4 Microsoft.VisualBasic程序,P5 8.0.0.0,P6 4333d6d8,P7 5E,P8 1E1,P9 34ssps20bdj3nj0wmit5kamzhvglfzcc,P10 NIL。

的EventType clr20r3,P1 MAIN.EXE,P2 1.0.0.0,P3 4f6b05ad,P4 Microsoft.VisualBasic程序,P5 8.0.0.0,P6 4333d6d8,P7 85,P8 A2,P9 system.componentmodel.win32, P10 NIL。

我们在Windows Server 2003上安装了终端服务器,并且在上述一天中有大约500个错误。

有什么建议吗?

回答

2

它看起来像你正在得到一些未处理的例外。如果.NET应用程序遇到未被Try/Catch块捕获的异常,并且没有调试器显示它,则应用程序将终止。

添加一些异常处理并记录到您的应用程序,以便您可以看到异常的所有细节。当您显示或记录它时,我建议使用异常对象的ToString方法,因为它会显示异常及其所有内部异常的异常类型,消息和堆栈跟踪。得到这些信息后,应该更容易确定发生了什么问题以及如何解决问题。

要添加异常处理,如果您正在使用VB的应用程序框架,请转至项目属性页面的“应用程序”选项卡并单击“查看应用程序事件”按钮。在MyApplication类,添加事件处理程序为UnhandledException事件,如:

Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs) Handles Me.UnhandledException 
    MyLog.WriteEntry(e.Exception.ToString()) 
End Sub 

但是,如果你不使用的应用程序框架,去你的应用程序的入口点求佛(Sub Main),把一个尝试围绕在该方法的全部代码,如/ Catch块:

Public Sub Main 
    Try 
     ' ... 
    Catch ex As Exception 
     MyLog.WriteEntry(ex.ToString()) 
    End Try 
End Sub 

这些示例假设你有一个MyLog类与共享WriteEntry方法。显然你需要在这样的一个类中实现你自己的日志记录。

+0

如果是用户模式的应用程序,应该有一个默认的顶层异常处理程序显示错误。如果不是,请检查以确保您不覆盖默认值并挂接正在吞服该错误的新的顶级异常处理程序。但是,是的,它实现日志记录绝不会伤害......只是不要通过将主要方法封装在try/catch块中来实现,而是使用非常规异常挂钩,这就是它的用处。 – 2012-07-31 17:55:17

+0

@CodyGray通过“未处理的异常挂钩”,你是指'MyApplication.UnhandledException'事件? – 2012-07-31 17:58:30

+0

是的,就是那个。这是记录错误以进行调试的最佳方式。将空白捕获块中的所有内容都包含在内,只是隐藏了错误,并希望从任何未知的异常中恢复,这是不负责任的乐观主义。我在之前讨论过[这里](http://stackoverflow.com/a/4827646/366904)。 – 2012-08-01 21:06:44

相关问题