gpt4 book ai didi

multithreading - Delphi多线程程序中奇怪的0x0eedfade异常

转载 作者:行者123 更新时间:2023-12-03 15:10:16 40 4
gpt4 key购买 nike

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

Application popup: ht_switch.exe - Application Error : The exception unknown software exception (0x0eedfade) occurred in the application at location 0x77e4bef7.

在应用程序事件日志中我可以看到:

Faulting application ht_switch.exe, version 1.2.0.2, faulting module kernel32.dll, version 5.2.3790.5069, fault address 0x0000bef7.
有时,此类条目位于应用程序或系统事件日志中,但没有任何反应 - 我的服务器正常工作,但有时只是消失。然后,服务管理器在 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 错误很神秘,并且没有向我显示任何有关问题根源的提示。这也很奇怪,因为在显示这样的消息后,服务工作没有问题(大多数时候)。

od异常拦截器总结:

EurekaLog 和 madExcept 可能擅长处理 Delphi 引发的异常,但似乎我的服务的更改行为和错误神奇地消失了,或者它们报告异常到我找不到的地方。

编辑:问题已解决

经过一些调试后,我无处可去(调用堆栈有非常奇怪的地方),我退出了它并开始检查最后提交的更改。一项更改是字符串操作,其中字符串 (AnsiString) 的长度可以为 64 或 128(某种位掩码)。我设置了之前使用 SetLength(buffer, 64) 分配的字符串的第 70 个字符。这就是问题所在。我想通过启用范围检查可以节省时间。

最佳答案

How to trace such 0x0eedfade exception?

这是 Delphi 异常的代码。显然,您正在引发一个未得到处理的 Delphi 异常,这会导致您的流程崩溃。

您应该将 madExcept、EurekaLog、JCLDebug 或类似内容添加到您的流程中。当您的流程失败时,这些工具将生成诊断报告。这些报告中最有用的部分是故障点的堆栈跟踪。然后,您至少应该能够找出故障发生的位置,这通常足以找出代码的问题所在。

关于multithreading - Delphi多线程程序中奇怪的0x0eedfade异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16602756/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com