首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi多线程程序中奇怪的0x0异常

Delphi多线程程序中奇怪的0x0异常
EN

Stack Overflow用户
提问于 2013-05-17 06:23:59
回答 1查看 10.6K关注 0票数 6

我的多线程服务器有奇怪的问题。它是Windows服务,工作方式类似于FTP服务器,管理到许多客户端的套接字连接。它是使用Delphi 2006 (Turbo )创建的,在大多数机器上运行良好。不幸的是,在某些机器上,它有时会在没有任何跟踪的情况下崩溃(异常应该保存到日志中,但不保存)。有时,系统会显示MessageBox (它不是来自服务的MessageBox,但我认为它是system MessageBox),但是我经常在system EventLog中看到这样的信息:

代码语言:javascript
复制
Application popup: ht_switch.exe - Application Error : The exception unknown software exception (0x0eedfade) occurred in the application at location 0x77e4bef7.

在应用程序EventLog中,我可以看到:

代码语言:javascript
复制
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个小时并崩溃了。我在我的帖子中发现了这个异常:

代码语言:javascript
复制
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个字符。这就是问题所在。我想我可以通过允许范围检查来节省时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-17 07:03:18

如何跟踪这样的0x0eeddefack异常?

这是Delphi异常的代码。很明显,您正在引发一个Delphi异常,该异常没有被处理,并且正在降低您的流程。

您应该添加madExcept、EurekaLog、JCLDebug或类似于您的流程。当进程失败时,这些工具将生成诊断报告。这些报告中最有用的部分将是故障点处的堆栈跟踪。然后,您应该能够确定故障发生在哪里,至少,这通常足以解决代码的问题所在。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16602756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档