0

我正在使用 winforms 在 Visual C# 中开发一个应用程序。

该应用程序基本上是一个带有三个选项卡的屏幕。它显示每秒在系统上运行的进程的值(使用System.Diagnostics.Process[])。

它生成和更新大量数字和计算(大约 4000/秒)。但是在 10000 次迭代或大约 45 分钟的工作之后,它就崩溃了,令人惊奇的是它总是在同一时间崩溃。

这里涉及的 RAM 只有 70mb,并且在 windows xp 和 windows 7 下的应用程序的 CPU 负载从未超过 35%。该应用程序的目的是允许用户查看系统上运行的进程以及 cpuload 和内存负载。由于安全原因,我们不能推荐任务管理器。

C# 没有通过任何try - catch方法捕获该错误

以下屏幕是崩溃后的示例

在此处输入图像描述

主应用程序屏幕如下所示

在此处输入图像描述

有没有人遇到过应用程序在固定运行长度后崩溃的情况。

请建议一种诊断工具或捕获此类错误的方法。

感谢您的回复

4

2 回答 2

4

如果您在这台机器上安装了 Visual Studio,您应该能够在应用程序崩溃时对其进行调试。至少您应该看到抛出了哪个异常以及在哪里抛出。

在我的应用程序中,我有一个处理程序,它捕获未捕获的异常并将它们写入日志文件。

添加到构造函数

AppDomain currDomain = AppDomain.CurrentDomain;
currDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExHandler);

并添加这个处理程序

private void UnhandledExHandler(object sender, UnhandledExceptionEventArgs args)
{
    Exception e = (Exception)args.ExceptionObject;
    // Log the exception here
}
于 2012-07-20T06:27:05.083 回答
4

尝试将此添加到您的主要空白处的服务中

AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

        public static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            // do your logging here, write to a file, or send an email
        }

service.ExceptionThrown += service_ExceptionThrown;

        private static void service_ExceptionThrown(object sender, ExceptionThrownEventArgs e)
        {
            // do your logging here, write to a file, or send an email
        }

如果你想在 Visual Studio 中调试你的服务,那么只需在命令行参数中通过启动选项添加 -d

命令行参数

于 2012-07-20T06:27:52.927 回答