求教,什么情况下程序才会崩溃,不报错自动关闭?
编的一个程序,有时候执行几天没事,有时候执行几小时就崩溃了,自动关闭。
用FASTMM跟踪不报错、用eurekalog跟踪不报错,打开Map也没记录。
用的插件都是大路货,如Indy,dbgrideh,有用多线程,但没有反复创建释放。
想了解,有哪些原因会导致不报错,程序会直接自动关闭?
[解决办法]
访问了内存中已释放的对象时可能会崩溃
建议通过以下方法来调试:
1、去掉部分可能导致崩溃的代码,找到大概出问题的地方,重点检查调试那一部分代码
2、多加日志看看是从哪些代码跳出程序的
3、很有可能的原因是线程中的问题
[解决办法]
做了什么关键事情后,写入日志
以便事后跟踪分析:什么事情后才会。。。。。。。。。
[解决办法]
多线程程序里常见,子线程在运行时内存出错就会这样,多查查你子线程里的代码,内存(对象)该手动释放的就得手动释放,最起码是保险
[解决办法]
这类无声无息死掉有以下几种可能:
1、Statck Overflow栈溢出,这类错误主要查是否在函数体内分配了大的数组或结构体,另外检查函数递归问题;
2、有未截获的异常处理,这类错误如果是服务也会无声无息死掉,应用程序一般会弹错误框;
3、内存或线程申请太多,操作系统杀掉你的程序;
4、是否访问了系统的禁区,造成了Ring 0级的错误;
建议输出一些运行日志,看程序是在那一步死掉的,另外如果是多线程程序,程序不稳定可以从查并发入手。