【发布时间】:2014-05-02 08:22:11
【问题描述】:
我已经广泛搜索了有关如何尝试和捕获所有错误的建议,但我没有找到任何我没有尝试过的东西。
这是我最近在工作中继承的 Visual Basic .NET (.NET 3.5) 应用程序。他们遇到这个问题已经有一段时间了,应用程序只会崩溃而没有错误——程序只是关闭/消失。
应用程序已经在处理MyApplication.UnhandledException,但没有发现问题。我为AppDomain.CurrentDomain.UnhandledException 添加了一个处理程序,看看这是否能解决问题,但没有运气,我正在处理System.UnahndledExceptionEventArgs.ExceptionObject 可能不是Exception 类型的事实。
没有创建其他线程,也没有创建其他 AppDomain。它似乎在使用 3-5+ 小时之间的任何地方崩溃,并且不依赖于用户采取的操作。
说了这么多,还有什么我可以尝试捕捉这些错误的方法吗?我所有的专业知识都围绕着 C#,所以我不确定是否还有其他东西可以与 VB.NET 挂钩,或者我是否错过了其他东西。
我的另一个问题是:在这些事件中记录错误的正确方法是什么?我通常尝试登录到文件,但是,现有代码和我自己快速尝试捕获未处理的 AppDomain 异常正在触发 MessageBox。在我写这篇文章时,我可能认为这可能是我没有被告知错误的原因。
谢谢
更新 1
我终于让它崩溃了(不是在 IDE 中),并且看到看起来像是 MessageBox 窗口轮廓的东西在绘制内容之前迅速出现和消失。我已修改未处理的异常处理,改为登录到用户桌面上的文件。我想此时它更像是一个等待游戏,因为我无法让它在 IDE 中崩溃。
【问题讨论】:
-
愚蠢的问题但是:如果没有任何错误,你怎么知道这是一个异常?也许在一些很少使用的例程中,有人插入了
End或类似的东西,从而在没有进一步通知或不考虑任何事情的情况下关闭了应用程序? -
@Jens 不幸的是我已经调查过了。我什么也没找到,有时它会在“保存”时崩溃。用于保存的跟踪代码没有产生任何应用程序退出或类似情况。我现在真的迷失了这个问题。保存也用
Try Catch包裹Exception。 -
如果您真的很绝望,请添加代码以将日志条目写入文件中的每个函数,如
IO.File.AppendText("C:\Logs\Logs.txt", Date.Now.Tostring & ": Function XY beginning")或类似的东西。崩溃后,您可以跟踪导致崩溃的函数。 -
尝试从发布代码切换到调试代码。至少如果它在错误处理之外失败,它将被记录到事件日志中。检查您的 Sub Main 以确保所有内容都覆盖有 Try Catch。如果您使用表单工厂,请确保将新表单实例化为表单变量,而不是将表单变量设置为 Nothing 并实例化新实例。将分析代码添加到所有表单加载/卸载。类和 Sub Main 相同。
-
代码中有FailFast吗?
标签: vb.net winforms exception-handling .net-3.5 unhandled-exception