【问题标题】:Application crashes with no error -- Unhandled is Handled应用程序崩溃而没有错误——未处理是已处理的
【发布时间】: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


【解决方案1】:

似乎我尝试捕获所有异常都是正确的。捕获AppDomain.CurrentDomain.UnhandledException 在这些崩溃中被触发。我最初尝试弹出一个消息框是有缺陷的。今天在我更改登录到用户桌面上的文件并正确报告错误后,它今天崩溃了。


以防有人对崩溃感到好奇——看来我由于第三方控制而耗尽了 GDI 资源。在初始化控件时随机抛出内存不足异常。在我今天发现的错误的情况下,它在打开表单时在标准 TextBox 的构造函数中爆炸。这与我在运行内存分析器时发现的非常小的 GDI 泄漏相吻合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多