现在我的c#程序,有时候连续运行1个小时没问题(里面不断有循环),有时候运行10分钟就有以下提示: 访问禁止读写的内存....... 内存已损坏 
 
 或者
 
 遇到什么......严重错误,程序无法继续 我想问,有没有什么工具可以捕抓整个程序的错误,难道我要在所有的程序块都要加上 try catch ?
 
 或者有什么日志工具(适合vs2008),能够记录整个程序运行过程中出现的所有错误,并且记录错误所在行.

解决方案 »

  1.   


       static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);            Application.Run(new Form1());
            }        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
            {
                throw new NotImplementedException();
            }
        }即始这样也不能保证所有异常都被捕捉到。
      

  2.   

    在 global.asax 的 Application_Error中捕获呢
      

  3.   

    Application.ThreadException 对线程抛出的异常也是捕捉不到的。
      

  4.   

    你要找出错误的原因,而不是想尽办法去躲避错误~~~~~~~
    像“ 访问禁止读写的内存”,一般都是用到了其他非托管类型的DLL,例如C++,delphi等等,才会出现这样的错误
      

  5.   

    用TranceSource 全程跟踪程序
      

  6.   

    用TraceSource 全程跟踪程序
      

  7.   


    啥意思 ,try catch ?
      

  8.   

    你用dot trace软件跟踪是试试,看内存变化
      

  9.   

    c# winform 的入口程序是不是以下这个?  public Form1()
      {
         InitializeComponent();                        
      }       
      
      
      如果要捕获全局错误,我看网上的例子,应该不是winform的(请看下面),但如果是winform的,要捕抓全局 try catch,应该怎么try?
      
      static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                try
                {
                    //处理未捕获的异常   
                    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                    //处理UI线程异常   
                    Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
                    //处理非UI线程异常   
                    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);                Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new Form1());
                }
                catch (Exception ex)
                {
                    string str = "";
                    string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "\r\n";                if (ex != null)
                    {
                        str = string.Format(strDateInfo + "异常类型:{0}\r\n异常消息:{1}\r\n异常信息:{2}\r\n",
                             ex.GetType().Name, ex.Message, ex.StackTrace);
                    }
                    else
                    {
                        str = string.Format("应用程序线程错误:{0}", ex);
                    }
                    writeLog(str);
                    MessageBox.Show("发生致命错误,请及时联系作者!", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }        }