我有一个Windows c#程序(.net 3.5),它在后台运行在实时控制器(Windows 7 Embedded)上。
过了几天,这个过程显然终止了。 现在我正在彻底记录我的程序的操作和异常。 可以抛出异常的所有东西都被try / catch包围,并且正在写入日志文件,并且如果记录器有一个写入windows事件日志的异常。
但是日志中没有任何内容暗示可能导致程序终止的异常。
是否有其他技术可以捕获并记录程序终止?
到目前为止,我无法在在线调试会话中重现该错误。
程序本身很简单。 它使用两个秒表并产生一个线程来与实时程序进行通信。它写一个'alive'布尔值,一个'错误'整数并读取另一个整数。日志文件大小限制为10 MB。如果达到大小,则使用日期重命名文件并打开新文件。超过30天的文件将被删除。
我检查了Windows事件日志,找不到与程序直接相关的任何内容。
你会做什么?
答案 0 :(得分:0)
最好的方法是考虑全局异常。您可以捕获第一次机会异常,它将捕获应用程序中发生的每个异常,这可以像添加以下代码一样完成:
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{
Debug.WriteLine(eventArgs.Exception.ToString());
};
另外,有关处理全局异常的更多详细信息,请参阅this非常有用的文章。
答案 1 :(得分:0)
我可以回答我自己的问题。
不幸的是,我在我的问题中遗漏了一个我认为无关紧要的细节。 在任何用户登录之前,应用程序由系统启动时由Windows任务调度程序启动。任务属性中有一个复选框,如果任务耗时超过3天,则会终止该任务。我忘了取消它:(。
感谢您的贡献。