【问题标题】:c# how to log unexpected program exitc#如何记录意外的程序退出
【发布时间】:2018-03-20 11:01:43
【问题描述】:

我有一个 Windows c# 程序 (.net 3.5),它在实时控制器 (Windows 7 Embedded) 的后台运行。

几天后,该过程明显终止。 现在我正在彻底记录我的程序的操作和异常。 所有可以抛出异常的东西都被 try/catch 包围,并被写入日志文件,如果记录器有异常写入 Windows 事件日志。

但日志中没有任何提示可能导致程序终止的异常。

是否有其他技术可以捕获和记录程序终止?

到目前为止,我无法在在线调试会话中重现该错误。

程序本身非常简单。 它使用两个秒表并产生一个线程与实时程序进行通信。它写入一个“活动”布尔值、一个“错误”整数并读取另一个整数。日志文件大小限制为 10 MB。如果达到大小,则使用日期重命名文件并打开一个新文件。超过 30 天的文件将被删除。

我检查了 Windows 事件日志,找不到与程序直接相关的任何内容。

你会怎么做?

【问题讨论】:

标签: c# debugging logging


【解决方案1】:

我可以回答我自己的问题。

不幸的是,我在我的问题中遗漏了一个我认为无关紧要的细节。 该应用程序由 Windows 任务调度程序在系统启动时在任何用户登录之前启动。任务属性中有一个复选框,如果它需要超过 3 天,则终止任务。我忘了取消选中它:(。

感谢您的贡献。

【讨论】:

    【解决方案2】:

    对您来说最好的方法是考虑全局异常。您可以捕获第一次机会异常,它将捕获应用程序中发生的每个异常,只需添加以下代码即可完成:

    AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
    {
        Debug.WriteLine(eventArgs.Exception.ToString());
    };
    

    有关处理全局异常的更多详细信息,您可以参考this 非常有用的文章。

    【讨论】:

      猜你喜欢
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多