什么让进程安静的消失?
偶的程序(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




