【问题标题】:Application error: fault address 0x00012afb (Expert)应用程序错误:故障地址 0x00012afb(专家)
【发布时间】:2010-06-14 19:42:51
【问题描述】:

我需要一些“光”来获得解决方案。可能有很多事情会导致这个问题,但也许有人可以帮助我。

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

几天后(有时是一周,有时是几个月),Windows 开始出现奇怪的行为,例如无法打开开始菜单,对话框中缺少一些按钮。很快一些应用程序无法打开,在 eventviewer 上引发了一个事件:

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

与此同时,其他应用程序可以正常打开,例如记事本、iexplore 等……但我的一些应用程序不能正常打开,只有上面描述的事件日志。但是如果我们不重新启动系统,几天后甚至 cmd.exe 都会停止打开,(和所有其他应用程序)在事件日志上会出现同样的错误。

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

提前致谢。

【问题讨论】:

  • 并不是说这会有所帮助,但 0x00012afb 似乎位于 kerner32.dll 中的入口点 666(函数 RaiseException)。
  • 它可以帮助,一些程序员有不通过引用捕获异常的坏习惯。如果线程内存不足,那么异常可能会导致整个进程退出,因为异常本身无法继续,并且 c++ 运行时无法恢复。也许是对不良异常处理的暗示。 goingware.com/tips/parameters/exceptions.html
  • 添加到我之前的评论中,这个错误日志是不够的——如果日志包含故障时的整个堆栈,那就更好了。事实上,事件只是说:“应用程序 x,版本 y 抛出错误”。

标签: windows event-log kernel32


【解决方案1】:

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

一旦您知道应用程序泄漏并且它是您的,您可以使用 Rational purify 或 Boundschecker 来深入解决问题。如果您没有钱购买这些工具,您将不得不手动减少问题,例如停用某些功能并查看句柄数是否仍然增加...

不确定是否是您遇到的问题,可能完全不相关。但是很容易检查。跟踪是当您遇到其他应用程序问题时,某些应用程序正在窃取一些全球资源。记事本之类的应用程序不会占用太多资源,因此看起来运行良好,但繁重的应用程序更有可能出现问题。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多