我的多线程服务器有奇怪的问题。它是Windows服务,工作方式类似于FTP服务器,管理到许多客户端的套接字连接。它是使用Delphi 2006 (Turbo )创建的,在大多数机器上运行良好。不幸的是,在某些机器上,它有时会在没有任何跟踪的情况下崩溃(异常应该保存到日志中,但不保存)。有时,系统会显示MessageBox (它不是来自服务的MessageBox,但我认为它是system MessageBox),但是我经常在system EventLog中看到这样的信息:
Application popup: ht_switch.exe - Application Error : The exception unknown software exception (0x0eedfade) occurred in the application at location 0x77e4bef7.在应用程序EventLog中,我可以看到:
Faulting application ht_switch.exe, version 1.2.0.2, faulting module kernel32.dll, version 5.2.3790.5069, fault address 0x0000bef7.有时这类条目在应用程序或系统EventLog中,但什么都没有发生--我的服务器正常工作,但有时会消失。然后服务管理器在EventlLog中报告我的服务意外停止。
对于这样的问题,我看不出“共同”的情况。它出现在一些WinXP,Win2003和Win2008上。所有测试机器都应用了所有的MS补丁程序。
我读过答案:0x0eedfade kernelbase.dll faulting module in d7 windows service,但我不使用Dialog单元。
我能做些什么来修理它?如何跟踪这样的0x0eedfade异常?
编辑
我用EurekaLog和madExcept对服务器进行了几天的测试。
EurekaLog
服务器的工作没有问题。EventLog中没有报告任何例外情况。在%AppData%\EurekaLab s.a.s\EurekaLog\Bug Reports\中没有报告任何异常(我的程序应该有目录,但它不是创建的--我不知道应该创建它还是EurekaLog错误)。
EurekaLog7在将“应用程序类型”设置为Windows时有问题。这是一个已知的问题,作者对此进行了研究。用它编译的服务可以在WinXP上工作,但不能在Win2003上工作。它根本没有开始。
madExcept
服务器工作了4个小时并崩溃了。我在我的帖子中发现了这个异常:
EAccessViolation: Access violation at address 7C90100B in module 'ntdll.dll'. Read of address 00000018!!!我没有注意到关于这个异常的任何madExcept报告。在此异常之后,CLOSE_WAIT状态下的套接字丢失了一个线程(另一方关闭了连接)。然后,我重新开始我的服务,几个小时后,它的工作没有问题。
禁用EurekaLog和madExcept
在10-30分钟后,我看到了MessageBox的错误.但是0x0eedfade错误是神秘的,没有给我任何关于问题来源的提示。这也是非常奇怪的,因为在显示这样的消息之后,服务可以正常工作(大多数情况下)。
摘要异常拦截器
EurekaLog和madExcept可能擅长德尔菲引发的异常,但似乎我的服务和错误的更改行为神奇地消失了,或者他们向我找不到的地方报告了异常。
编辑:问题解决
经过一些调试,使我无处可寻(用非常奇怪的地方给Stack打电话),我辞职了,并开始检查最后所做的更改。一个改变是字符串操作,其中字符串(AnsiString)的长度可以是64或128 (某种位掩码)。我设置了前面用SetLength(buffer, 64)分配的字符串的第70个字符。这就是问题所在。我想我可以通过允许范围检查来节省时间。
发布于 2013-05-17 07:03:18
如何跟踪这样的0x0eeddefack异常?
这是Delphi异常的代码。很明显,您正在引发一个Delphi异常,该异常没有被处理,并且正在降低您的流程。
您应该添加madExcept、EurekaLog、JCLDebug或类似于您的流程。当进程失败时,这些工具将生成诊断报告。这些报告中最有用的部分将是故障点处的堆栈跟踪。然后,您应该能够确定故障发生在哪里,至少,这通常足以解决代码的问题所在。
https://stackoverflow.com/questions/16602756
复制相似问题