当前位置:编程学习 > C#/ASP.NET >>

程序运行一段时间关闭时候不知怎么回事抛异常

未处理 System.NullReferenceException
  Message="未将对象引用设置到对象的实例。"
  Source="MySql.Data"
  StackTrace:
       在 MySql.Data.MySqlClient.NativeDriver.FetchDataRow(Int32 statementId, Int32 columns)
       在 MySql.Data.MySqlClient.Driver.FetchDataRow(Int32 statementId, Int32 columns)
       在 MySql.Data.MySqlClient.Driver.SkipDataRow()
       在 MySql.Data.MySqlClient.ResultSet.Close()
       在 MySql.Data.MySqlClient.MySqlDataReader.NextResult()
       在 MySql.Data.MySqlClient.MySqlDataReader.Close()
       在 MySql.Data.MySqlClient.MySqlConnection.Close()
       在 MySql.Data.MySqlClient.MySqlConnection.Dispose(Boolean disposing)
       在 System.ComponentModel.Component.Finalize()
  InnerException: 
--------------------编程问答-------------------- 调试吧,空对象引用,使用了不存在的对象 --------------------编程问答-------------------- 是在程序结束时 抛出的异常
也没有指示 报异常的地方 --------------------编程问答-------------------- 偶然问题?还是每次都出现这个问题

若是后者 必然是代码的问题  程序运行一段时间后  结束时  在vs中 添加到线程调试
直接debug吧 --------------------编程问答-------------------- 有时候调试下没问题,正式运行才会爆吧!你是不是用了多线程之类的。这种问题还是查查代码吧 --------------------编程问答-------------------- 是偶然问题 
最郁闷的是现在还不知道 程序的报错关键所在 --------------------编程问答--------------------
引用 3 楼 yanbuodiao 的回复:
偶然问题?还是每次都出现这个问题

若是后者 必然是代码的问题 程序运行一段时间后 结束时 在vs中 添加到线程调试
直接debug吧


是的 做的多线程操作的 --------------------编程问答-------------------- 多线程你就打log吧 --------------------编程问答-------------------- 和多线程没有什么关系吧  
程序结束时 做了两种测试
1 是释放线程 再结束主程序
2 直接结主程序 

大概十分钟后 再关闭程序 会报错(但是又不是每次报错) --------------------编程问答-------------------- 多线程不好调试而且你也不是每次能重现,打log可以记录错误原因,打吧~ --------------------编程问答-------------------- 我也出过这种错误,DB+多线程。就是多线程惹的祸。 --------------------编程问答--------------------
用日志记一下出错的地方。。

然后报错的地方该做非空判断的做判断 --------------------编程问答-------------------- 通过"未处理 System.NullReferenceException
  Message="未将对象引用设置到对象的实例。"
是没有实例化的地方,你却去访问了某个属性,这个对象是null.

我诂计你是否已断开链接,结果你关闭程序时又想再一次断开一次链接,而这个对象已经是null,造成了你如上的结果.

--------------------编程问答-------------------- 楼上言之有理,可能是已经关了连接了,又去关了,建议所有关闭操作做到finally中
引用 12 楼 aganqin 的回复:
通过"未处理 System.NullReferenceException
Message="未将对象引用设置到对象的实例。"
是没有实例化的地方,你却去访问了某个属性,这个对象是null.

我诂计你是否已断开链接,结果你关闭程序时又想再一次断开一次链接,而这个对象已经是null,造成了你如上的结果.
--------------------编程问答-------------------- 坐等正解。 --------------------编程问答--------------------

using System;
using System.Windows.Forms;
using CubeNS.UserManage;
using CubeNS.Controls;
using CubeNS.BackupAndClean;
using CubeNS.GoodsManage;

namespace CubeNS
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }// 一步一步调试运行到这里报错
    }
}

--------------------编程问答-------------------- 就是有空值嘛!如果跑了一段时间看下你那些数据是不是有空值出现了!从数据那部分着手处理下 --------------------编程问答--------------------
引用 15 楼 dright 的回复:
C# code

using System;
using System.Windows.Forms;
using CubeNS.UserManage;
using CubeNS.Controls;
using CubeNS.BackupAndClean;
using CubeNS.GoodsManage;

namespace CubeNS
{
    static class Program……

这个基本没有意义   最粗暴的做法  这里加个try catch 把错误存起来  最好把堆栈里的错误页提取出来  然后再分析 --------------------编程问答-------------------- 是在方法最后一步 运行结束 抛出的异常 log 根本捕获不了
这个 该怎么捕获呢 --------------------编程问答-------------------- 总算找到bug了 是mysql-connector-net-6.3.2 这个驱动有问题 
换成mysql-connector-net-6.5.4 就好了
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,