delphi程序不报错就崩溃了
编的一个程序,有时候执行几天没事,有时候执行几小时就崩溃了,自动关闭。
用FASTMM跟踪不报错、用eurekalog跟踪不报错,打开Map也没记录。
用的插件都是大路货,如Indy,dbgrideh,有用多线程,但没有反复创建释放。
想了解,有哪些原因会导致不报错,程序会直接自动关闭?
访问了内存中已释放的对象时可能会崩溃
建议通过以下方法来调试:
1、去掉部分可能导致崩溃的代码,找到大概出问题的地方,重点检查调试那一部分代码
2、多加日志看看是从哪些代码跳出程序的
3、很有可能的原因是线程中的问题
多线程程序里常见,子线程在运行时内存出错就会这样,多查查你子线程里的代码,内存(对象)该手动释放的就得手动释放,最起码是保险
这类无声无息死掉有以下几种可能:
1、Statck Overflow栈溢出,这类错误主要查是否在函数体内分配了大的数组或结构体,另外检查函数递归问题;
2、有未截获的异常处理,这类错误如果是服务也会无声无息死掉,应用程序一般会弹错误框;
3、内存或线程申请太多,操作系统杀掉你的程序;
4、是否访问了系统的禁区,造成了Ring 0级的错误;
建议输出一些运行日志,看程序是在那一步死掉的,另外如果是多线程程序,程序不稳定可以从查并发入手。
我也有遇到过类似的问题、同样也是用了indy、在线程中有动态创建TIdHttp获取网上的内容、我为了防止获取失败造成线程的锁死、就设置了idhttp的超时、并放在try里面、结果运行没两分钟就自动管理、无任何提示、可是我只要把try语句去掉就没有问题了、这个问题我至今觉得很奇怪
死锁,内存溢出都可以导致程序或系统崩溃