【问题标题】:vb.net Run on crashvb.net 在崩溃时运行
【发布时间】:2014-07-15 15:06:12
【问题描述】:

我的程序在夜间运行了大约 10 个小时,有时我醒来发现它已经崩溃(无论出于何种原因)。它通常是一个“程序名称”已经停止工作,并且唯一的按钮是关闭程序。我曾尝试观看并等待它崩溃,但问题似乎很难重现(而且我无法全天候 24/7 观看)。我在我的程序中可能有问题的地方使用了 try 和 catch 语句,并告诉程序如果捕获到异常就转储到文本文件中。但这似乎还不够好。

TLDR:当在程序中检测到异常(没有具体细节)时,是否可以告诉我的程序运行特定函数,以便我可以将堆栈跟踪转储到文本文件并稍后进行调查?

【问题讨论】:

  • 您查看过应用程序事件日志文件的内容吗?您还可以自己在代码中的特定点输出日志,这样当它失败时,您会看到它失败的距离和位置。您可能需要多次执行此操作,以查看每次故障是否在同一点。目前几乎没有什么可做的。
  • 这是 Winforms、WPF 还是其他?

标签: vb.net exception


【解决方案1】:

是否可以在检测到异常时告诉我的程序运行特定功能...

是的,但具体取决于您使用的平台:

  • 如果您有控制台应用程序,请在 Sub Main 周围放置一个大的 Try ... Catch

  • 如果您使用 WPF,请将事件处理程序添加到 AppDomain 或 Dispatcher 的 UnhandledException 事件。具体可以在以下问题中找到:

    WPF global exception handler

  • 在您使用 WinForms 时,您还可以包装 Sub Main(可能是自动生成的)或附加到 AppDomain.UnhandledException,请参阅此处了解详细信息:

    WinForms Global Exception Handling?

  • 为了完整起见,Web 应用程序中的全局异常处理是在 global.asax 的 Application_Error 方法中完成的:

    How to catch unhandled exceptions in an asp.net application?

【讨论】:

    【解决方案2】:

    这样做通常不是一个好主意。但是,您可以查看AppDomain.UnhandledException。这几乎仅限于一个域,并且您还将(可能)收到与您的程序无关的所有未处理异常的通知。

    这通常用于类库,但我认为稍作调整,您可能会使其工作。

    【讨论】:

      猜你喜欢
      • 2021-07-06
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多