C# 崩溃的问题,困扰很久了,先记录下来,待解决后再来总结

我写的一个C# winform程序,用来做人脸识别和开门,使用了emgu.cv来抓海康摄像头的RTSP视频流,和虹软的SDK做人脸识别。

程序中用到了多任务,定时触发的程序,http协议实现的客户端注册的回调程序,读取mysql数据库,socket控制开门等等功能。

问题的现象是程序会不定时的崩溃,没有弹出异常的窗口,日志也没记录到任何东西。

照着网上搜到的办法在program.c中增加以下的代码:

            //处理未捕获的异常
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            //处理UI线程异常
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            //处理非UI线程异常
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

结果照崩不误。

又仔细的理了下可能出问题的地方,在感觉会出问题的地方加了try catch异常处理,还试了一些其它方法,待后续再补充。

照旧,先记到这里。

继续,看到有人说查windows日志可以找到是哪里出问题的。

依次打开:计算机管理-》系统工具-》事件查看器-》Windows日志-》应用程序,界面如下

有戏!之前用批处理做了程序的崩溃后的自动重启,在重启的时候把时间写到了一个日志文件中。

windows系统记录下的日志很多,用这个时间来查找,果然找到了我的程序的出错信息,加上其它疑似相关的信息,共有.net、应用程序、mysql等9条。

先分析它们。待续。。。

继续

日志中列出的疑似相关记录如下:
信息    2019/4/29 10:53:39    MySQL    100    无
信息    2019/4/29 10:53:39    MySQL    100    无
信息    2019/4/29 10:53:39    Windows Error Reporting    1001    无
错误    2019/4/29 10:53:37    Application Error    1000    (100)
信息    2019/4/29 10:53:37    Windows Error Reporting    1001    无
错误    2019/4/29 10:53:34    Application Error    1000    (100)
错误    2019/4/29 10:53:33    .NET Runtime    1026    无
警告    2019/4/29 10:53:23    User Profile Service    1534    无
警告    2019/4/29 10:53:23    User Profile Service    1534    无

大致分析一下,时间顺序是从下往上。
先排除两条User Profile Service警告,因为详细信息看起来和我的程序无关,其它程序没有崩溃的时候也记录了同样的警告。
.NET Runtime,详细信息中明确说明了是我的程序由于未经处理的异常,进程终止。还记录下了调用栈,非常好,windows大爷就是windows大爷。
再往后四条Application Error 和Windows Error Reporting都是和.NET Runtime相关的。
两条MySQL是报告连接丢失的,应该是进程终止后的连锁反应而不是问题源头。

再找到本程序的其它崩溃时间点的日志看看,呃,有点麻烦啊。

主要有两种,一种是报emgu.cv.videocapture.retrive访问冲突,0xc0000005错误,一种是GDI里面报的0xc0000005,都是访问冲突。这两个报错的点有一个交集就是从视频流里抓到的视频帧的使用,videocapture.retrive负责抓帧,gdi会把包含陌生人的头像显示出来。

搜了一下,在Stackoverflow、github和opencv上都有人说遇到过这种问题,问题的根源在于retrive获取到的帧是和videocapture共享内存的,获取到之后的程序如果要使用,应该clone。

程序改了,明天看效果,之前基本上每天都要崩溃,少则一次,多则五次,如果能三天不崩,问题应该就解决了。

依然照旧啊,我都快崩溃了。

崩溃的时间没有规律,有些甚至是凌晨两点过,那时候肯定是没有人的,看出问题的点,还是在VideoCapture.Retrive()这个函数里。

暂时没招了啊,虽然emgu.cv是开源的,但是没有时间精力去搞啊,先用自动重启批处理顶着。什么时候解决?只有看缘分了。

 

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值