2010-06-14 24 views
1

我需要一些“光”来获得解决方案。可能有很多事情会导致这个问题,但也许有人可以帮助我。应用程序错误:故障地址0x00012afb(专家)

场景:运行24/7全天候运行的PostgreSQL数据库和其他服务器应用程序的Windows服务器(用于处理数据库上的任务等)。有不同的服务器场景(〜30),具有不同的硬件和Windows版本(XP SP3/WinServer等...都是基于NT的)。所有应用程序都使用Delphi7编写,并链接到DLL(也在D7中)。

经过一段时间(有时一周,有时几个月),Windows开始变得很奇怪,就像不打开开始菜单,对话框中缺少一些按钮。很快一些应用程序不开,在事件查看器养育事件:

Faulting application x, version y, faulting module kernel32.dll, version 5.1.2600.5781, fault address 0x00012afb 

在这其间,其他应用程序打开罚款,如记事本,IEXPLORE,等...但我的一些应用程序不这样做,只有事件日志如上所述。但是,如果我们不重新启动系统,在几天内甚至cmd.exe停止打开,(和所有其他应用程序)在eventlog上具有相同的错误。

我试图找到'什么'可以导致这种情况,但没有成功。所以,任何建议都会受到欢迎。

在此先感谢。

+0

这不会有任何帮助,但0x00012afb似乎在kerner32.dll中的入口点666(函数RaiseException)。 – Humberto 2010-06-14 20:01:40

+0

它可以帮助,一些程序员有不引用异常的坏习惯。如果线程内存不足,那么异常可能导致整个进程退出,因为异常本身无法继续,并且C++运行时无法恢复。也许是对异常处理不好的暗示。 http://www.goingware.com/tips/parameters/exceptions.html – jdehaan 2010-06-14 20:08:01

+0

添加到我以前的评论中,这个错误日志是不够的 - 如果日志在发生错误时包含整个堆栈,那就更好了。事实上,该事件只是说:“应用程序x,版本y抛出一个错误”。 – Humberto 2010-06-14 20:10:03

回答

2

我认为你的资源句柄(窗口句柄)用完了。您可以通过查看Sysinternals Process Explorer(更好的任务管理器)中的系统属性来验证此情况。我认为即使是默认的任务管理器也可以帮助显示句柄数。然后,您可以确定哪个应用程序导致了问题。

一旦您知道应用程序泄漏,并且如果它是您的,那么您可以使用Rational purify或Boundschecker深入探究该问题。如果你没有这些工具的钱,你将不得不手动减少一些问题,例如通过停用某些功能来减少这个问题,看看手柄计数是否仍然增加...

不知道是否它是您遇到的问题也许它是完全不相关的。但容易检查。跟踪是,有些应用程序正在窃取一些全球资源,因为您遇到与其他应用程序有关的问题。像记事本这样的应用程序不会使用太多的资源,因此看起来工作正常,大量的应用程序更可能出现问题。

希望它有帮助。