系统出现 EOutOfResources 错误,Out of system resources 请问如何跟踪 (200分)

  • 主题发起人 主题发起人 大文
  • 开始时间 开始时间

大文

Unregistered / Unconfirmed
GUEST, unregistred user!
出现错误的时候系统并不定位在出现错误的代码上,换而言之就是不知道是哪里出现错误,恳请各位出手相助。
我系统中有涉及到多线程操作全局对象或变量的地方全部都加了临界判断,可仍然有此错误出现,
我曾经跟踪过代码好像出在graphics.pas中的某个过程,可就是没有办法知道是哪里出错。(由于程序代码涉及到系统的安全问题,所以不方便贴出来。)
哪位师兄有过如此遭遇还请赐教一二。
 
我用 C + Win32 API 时遇到过类似情况,我当时的问题出现在处理 WM_PAINT 消息时
创建了 GDI 对象,但忘记释放。结果很快就造成系统资源不足。
你可以搜索源代码检查系统对象创建后是否释放。如果程序运行不久就出错,当然应该
先检查最频繁调用的代码段。
 
http://www.51delphi.com/delphi/soft?cx=EurekaLog+4.03
这里这个控件就是做这个用的,经它编译的DELPHI程序,就能在软件出错时,弹出一个窗口,告诉用户,出错的代码在哪个单元文件中的第几行。
 
KurekaLog也查不出来,看来要用savetime的方法慢慢看了。
 
我曾经跟踪过代码好像出在graphics.pas中的某个过程,可以就是没有办法知道是哪里出错。
把graphics.pas拷贝到工程目录下,应该就可以跟进去了
 
weiwei81123:
还是不行啊。
 
拷贝之后要Build All一把再调试
 
weiwei81123:
rebuild all 后也没有用。
 
看看内存分配的问题,例如
procedure 例子;
var
lb1:tlabel;
begin
lb1:=tlabel.create;
[其它代码]
// lb1.free;
若无此语句,多次调用“例子”就会出现OutOfReSource
end;
 
》》可就是没有办法知道是哪里出错。
只要有断点和源码,在出错后,RAISE之前,放一个断点,查看堆栈,就可以知道谁调用出错了。
具体要做的是:在COMPILE OPTIONS中勾上DEBUG INFO和USE DEBUG DCUS,在Exception中的所有CREATE过程中(大约有10几个)放置断点,当程序运行到这些断点时,按CTRL+F3或CTRL+ALT+S显示堆栈调用窗口,。。。
 
应该是你的资源的问题
往往使用了自定义的组件,做组件的Project加了一些资源:图片什么的
你的主程序的Project也加了一些资源,造成的。
仔细看看你的资源文件
 
把gui的处理放在主线程中处理就可以了。
 
明明已经结束了,怎么又冒出来了:(
 
后退
顶部