CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

什么让进程安静的消失?

楼主chenzhou35(vcworm.51.net)2005-11-22 21:52:05 在 VC/MFC / 界面 提问

偶的程序(Release版本)在不可预期的情况下可能出现崩溃,这个崩溃不会有任何非法提示或者发送错误框弹出来。  
   
  请问各位大虾,什么情况会导致进程这样悄悄的消失掉? 问题点数:200、回复次数:13Top

1 楼Snow_Ice11111(雪上加冰)回复于 2005-11-22 22:04:54 得分 20

写日志吧,如果你的程序规模不是很大的话,就在每个内存或资源申请、操作及释放处往log文件中添加记录,出错的时候跟踪日志看哪里出了问题。工作繁了点,不过好象也没有什么捷径。另外注意尽量让每个变量、对象在声明时都有初始值。Top

2 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2005-11-22 22:29:09 得分 20

就我遇到的情况,只碰到过一种情况:  
  那就是程序中存在着无限归递。Top

3 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-11-22 22:38:04 得分 40

原因挺多的,要看你出错的周期是,内存越界,非法指针都有可能。  
  可以是Release版能够调试,Project   Setting——C/C++——General下Optimizations改为Disable(Debug),   Debug   Info改为Program   Database   for   Edit   and   Continue,然后在Link下选中Generate   Debug   Info,   Rebuilt   ALL之后就可以对Release版进行调试Top

4 楼pomelowu(羽战士)回复于 2005-11-22 23:02:51 得分 20

虚拟内存的管理出问题了?堆栈溢出?   能“安静”消失的这两种可能性比较大。Top

5 楼DoItFreely(Freely)回复于 2005-11-23 09:20:04 得分 20

你怀疑有问题的地方用try{}catch(...){MessageBox()}包起来,一旦出现异常就会显示一个MessageBoxTop

6 楼duyhui(一天到晚游泳的鱼)回复于 2005-11-23 09:34:41 得分 20

在Debug下跑跑看,估计时间长了,也会有问题  
  可以用Snow_Ice11111(雪上加冰)的方法,加些日志Top

7 楼hjunxu(hjun)回复于 2005-11-23 09:50:30 得分 20

原因很多吧。  
  仔细调试把。  
   
  头痛的问题。Top

8 楼rageliu(天气好了就去长白山看水怪去了,嘿嘿...)回复于 2005-11-23 10:01:36 得分 20

try{}catch(...){MessageBox()怎么取得错误?  
   
  catch()放什么参数?Top

9 楼chenzhou35(vcworm.51.net)回复于 2005-11-23 11:12:30 得分 0

谢谢各位大虾们的帮助。  
   
  to:Snow_Ice11111(雪上加冰)    
  程序规模挺大,source在40w行左右,所以不大可能到处加log抓这个错误。  
   
  to:goodboyws(深夜不眠者)    
  内存越界,非法指针一般在崩溃的时候都会有错误框弹出来吧?  
   
  to:DoItFreely(Freely)    
  试过异常捕获了,抓不到。而且,按道理,如果有异常在程序未捕获,操作系统也会弹出错误框的。  
   
  to:pomelowu(羽战士)    
  我会想办法试试构造这样的情况来验证一下,另外请问一下,这种情况有什么好的方法可以让它从程序中暴露出来么?  
   
  还请大虾们继续提点。谢谢Top

10 楼ljmanage(过客)回复于 2005-11-23 11:42:38 得分 0

我碰到过几次,给数组赋值时,对出界操作,如i=-1;a[i]=111;直接退出了。主要都是各种访问内存越界的时候Top

11 楼38062708(土豆精)回复于 2005-11-23 15:12:21 得分 0

只有用写日志的方法,逐渐逐渐缩小可能出错的代码的范围,最后得出出错环境,然后解决它Top

12 楼DoItFreely(Freely)回复于 2005-11-25 08:50:22 得分 0

有异常不一定会出结束程序的对话框  
   
  你要是怀疑函数foo()有问题,就这样写  
  try  
  {  
    foo(参数就不必说了);  
  }  
  catch(...)//...表示捕获所有异常  
  {  
    MessageBox(0,_T("函数Foo()有问题"),_T("异常"),MB_OK|MB_ICONSTOP);  
  }  
  Top

13 楼yifanernei(f)回复于 2005-11-25 09:41:42 得分 20

在debug版本下崩溃,而在release下无提示退出的情况很多的,但常见的都是debug下的断言,我们知道,断言在release下是不执行的,比如判断一个窗口的句柄是否为窗口  
  assert(   IsWindow(m_hwnd));     如果你的线程中对一个关闭过的窗口操作,如取上面控件的text等,就会在这儿出错。但在release下这里不执行了,就不会报错,但你的GetWindowText操作就有可以导致线程的直接退出。  
  Top

相关问题

  • 进程自动消失的原因是什么?(50分)
  • 为什么我的程序关闭后再进程中还有,要过一会才能消失,这个过一会也不确定是多长时间
  • 结束进程时 如何使托盘图标消失?
  • 退出终端,后台进程就消失,咋回事?
  • 框架消失后,进程如何终止的?
  • 高分求教数据库进程突然消失的问题!!!
  • Winkjpu.exe是个什么进程?
  • phonetic是什么进程?
  • systray是什么进程?
  • swiwificomm.exe是什么进程?

关键词

  • 内存
  • release
  • debug
  • 出错
  • 日志
  • 越界
  • 程序
  • 消失
  • 大虾
  • 崩溃

得分解答快速导航

  • 帖主:chenzhou35
  • Snow_Ice11111
  • DentistryDoctor
  • goodboyws
  • pomelowu
  • DoItFreely
  • duyhui
  • hjunxu
  • rageliu
  • yifanernei

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo