导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

我的程序无任何提示自动退出了,这是为什么?

wohuazhen 2010-07-27 07:06:47
在wince上跑的一个MFC程序,有几个对话框在不停的自动切换,每个对话框都是全屏,有2个串口通信在跑协议数据。
程序运行了20天,突然自己退出了,只显示桌面。
之前程序出现内存不断增长的情况,invaluedate(0)和CDC::deletetempdc()这两个函数后,内存就不见增长了,但跑出了这个问题?没有任何提示。不知道什么原因。
...全文
162 点赞 收藏 15
写回复
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wohuazhen 2010-07-28
我再想想吧。
多谢各位。
回复
这种问题,还是要靠自己解决,大家也只能给你提提醒,
程序都跑了20多天了,无非两种,内存泄露,或外部程序干扰导致程序逻辑判断出错,自动退出!退出时没有提示什么吗?
回复
wohuazhen 2010-07-28
[Quote=引用 11 楼 siennaxu 的回复:]
可能还是资源的问题,重复递归次数多了很容易这样,我们以前有个小软件,就因为一个CBrush没有释放导致软件运行几个小时以后中断了,这种小隐患很难查到。。
good luck ~~
[/Quote]
中断,是什么意思?调试的中断?
CBrush没释放,最多造成内存增长,怎么会中断?
回复
wohuazhen 2010-07-28
[Quote=引用 9 楼 wuliaoxuebiancheng 的回复:]
楼主这种情况我有遇到过,查找出的原因是栈溢出了,代码递归调用过多,而且递归调用栈空间不自动释放的,楼主参考下看看!
[/Quote]
我自己写的代码,没有用到递归的。
我用的系统函数应该也不会有吧。
我会定时的调用一些系统函数来实现一些显示或获得系统内存信息。
栈溢出,系统不报错吗?

我怀疑两个方向
1,程序里的多个窗口用到同一个全局的临时背景图片DC(主窗口初始化时就创建好的)
我在每个onpaint的函数末尾都添加了deletetempdc()这个函数
2,其中一个串口程序是用到别人封装的一个串口驱动之上的DLL,我用它提供的函数,不是直接操作串口
如果这个dll有问题,是不是我的程序会受影响?
回复
siennaxu 2010-07-28
可能还是资源的问题,重复递归次数多了很容易这样,我们以前有个小软件,就因为一个CBrush没有释放导致软件运行几个小时以后中断了,这种小隐患很难查到。。
good luck ~~
回复
wohuazhen 2010-07-28
[Quote=引用 8 楼 adamwyb 的回复:]
引用楼主 wohuazhen 的回复:
程序运行了20天,突然自己退出了,只显示桌面。
再问下楼主,这个20天是你只测试了一次,还是每次都是20天退出?20天比较久,会不会是别的程序干扰?比如你的程序存在一些漏洞,被别的机器随机发送了一些消息,导致程序没有合理的判断,而崩溃?就是串口另一端的程序的问题。20天退出,乍一看好像就是资源不够了,也可能是突发事件造成的。
[/Quote]
第一次遇到这个问题。
除了系统程序外,只运行两个程序,1是主程序,2是主程序在空闲时调出的广告程序。两个程序间并没有数据关联。
是自身程序内部偶发的冲突引起的,还是外部进入的数据引起的,这个真不知道。
回复
西湖秀才 2010-07-28
楼主这种情况我有遇到过,查找出的原因是栈溢出了,代码递归调用过多,而且递归调用栈空间不自动释放的,楼主参考下看看!
回复
adamwyb 2010-07-28
[Quote=引用楼主 wohuazhen 的回复:]
程序运行了20天,突然自己退出了,只显示桌面。[/Quote]
再问下楼主,这个20天是你只测试了一次,还是每次都是20天退出?20天比较久,会不会是别的程序干扰?比如你的程序存在一些漏洞,被别的机器随机发送了一些消息,导致程序没有合理的判断,而崩溃?就是串口另一端的程序的问题。20天退出,乍一看好像就是资源不够了,也可能是突发事件造成的。
回复
wohuazhen 2010-07-27
[Quote=引用 6 楼 xsgluozi 的回复:]

嗯,写log是个好习惯
[/Quote]
写了有什么用呢?
程序退出是写log能抓住的吗?
回复
嗯,写log是个好习惯
回复
ac_de 2010-07-27
[Quote=引用 4 楼 visualeleven 的回复:]
引用楼主 wohuazhen 的回复:
在wince上跑的一个MFC程序,有几个对话框在不停的自动切换,每个对话框都是全屏,有2个串口通信在跑协议数据。
程序运行了20天,突然自己退出了,只显示桌面。
之前程序出现内存不断增长的情况,invaluedate(0)和CDC::deletetempdc()这两个函数后,内存就不见增长了,但跑出了这个问题?没有任何提示。不知道什么原因。

关键……
[/Quote]

同意
回复
Eleven 2010-07-27
[Quote=引用楼主 wohuazhen 的回复:]
在wince上跑的一个MFC程序,有几个对话框在不停的自动切换,每个对话框都是全屏,有2个串口通信在跑协议数据。
程序运行了20天,突然自己退出了,只显示桌面。
之前程序出现内存不断增长的情况,invaluedate(0)和CDC::deletetempdc()这两个函数后,内存就不见增长了,但跑出了这个问题?没有任何提示。不知道什么原因。
[/Quote]
关键代码的不妨写日志吧
回复
wohuazhen 2010-07-27
[Quote=引用 2 楼 adamwyb 的回复:]
这个时候内存已经不泄露了?那是不是日志写满了?应该是什么原因导致程序崩溃了。
[/Quote]
我写的日志只有什么时候开机,用户什么时候来,什么时候走,不可能写满
回复
adamwyb 2010-07-27
[Quote=引用楼主 wohuazhen 的回复:]
程序运行了20天,突然自己退出了,只显示桌面。
[/Quote]
这个时候内存已经不泄露了?那是不是日志写满了?应该是什么原因导致程序崩溃了。
回复
icefairy 2010-07-27
deletetempdc() 会不会是这里面删除了不该删除的东西??
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……