gpt4 book ai didi

delphi - Delphi 中的外部异常 EEFFACE

转载 作者:行者123 更新时间:2023-12-03 14:34:19 26 4
gpt4 key购买 nike

在使用 Delphi 2009 调试我的应用程序时,有时会出现以下异常:

What is this?
(来源:beholdgenealogy.com)

这种情况只是偶尔发生,但是按“确定”后,我的 IDE 和程序都可能会卡住。如果我幸运的话,有时我可以在 Delphi 中执行 File/SaveAll,但有时我不能。无论哪种方式,我都陷入困境,然后我唯一能做的就是使用 Windows 任务管理器关闭 Delphi。当然,如果我无法 SaveAll,那么我会丢失自上次保存以来所做的所有编辑。

我已经安装了所有 Delphi 2009 更新,包括更新 4。我还安装了 IDE Fix Pack 2009 2.9。

该错误被EurekaLog为我捕获,错误报告给出了以下调用堆栈:

Call Stack Information:
-----------------------------------------------------------------------------------------------------------
|Address |Module |Unit |Class |Procedure/Method |Line |
-----------------------------------------------------------------------------------------------------------
|Running Thread: ID=5068; Priority=0; Class=; [Main] |
|---------------------------------------------------------------------------------------------------------|
|205669C6|dbkdebugide120.bpl |Debug.pas |TDebugger |DBKWndProc |11598[6] |
|777DE49A|ntdll.dll | | |KiUserExceptionDispatcher | |
|7705E0CB|kernel32.dll | | |RaiseException | |
|03E8E3E8|dcc120.dll |WRITEOBJ.OBJ | |C62_0 | |
|03E3066D|dcc120.dll |SYMTAB.OBJ | |MakeOverloadedPropertyList| |
|03E3064C|dcc120.dll |SYMTAB.OBJ | |MakeOverloadedPropertyList| |
|03E30D76|dcc120.dll |SYMTAB.OBJ | |EnterMethod | |
|03E30D6C|dcc120.dll |SYMTAB.OBJ | |FindBaseClassMethod | |
|03DE8D30|dcc120.dll |DECL.OBJ | |PatchConstRecordParameter | |
|777DE590|ntdll.dll | | |RtlLeaveCriticalSection | |
|03DBBF70|dcc120.dll |BROWCMGR.OBJ | |PutToAddress | |
|03DBC436|dcc120.dll |BROWCMGR.OBJ | |GetNearestSymName | |
|777DE550|ntdll.dll | | |RtlEnterCriticalSection | |
|219C5BDA|win32debugide120.bpl|Win32Debug.pas |TWin32LinkUnit |GetCppDebugHook |1923[3] |
|219C5BB8|win32debugide120.bpl|Win32Debug.pas |TWin32LinkUnit |GetCppDebugHook |1920[0] |
|219C644E|win32debugide120.bpl|Win32Debug.pas |TWin32Process |DoLinkUnitCreated |2198[10] |
|50001CE4|rtl120.bpl |System.pas | |InterlockedIncrement |3200[0] |
|5000CD59|rtl120.bpl |System.pas |TInterfacedObject |_AddRef |21759[1] |
|2055F40F|dbkdebugide120.bpl |Debug.pas |TProcess |LinkUnitCreated |8454[1] |
|2055F408|dbkdebugide120.bpl |Debug.pas |TProcess |LinkUnitCreated |8453[0] |
|2055CEC7|dbkdebugide120.bpl |Debug.pas |TEvaluatorCallback|ntfyLinkUnitDelta |7167[7] |
|77050DF0|kernel32.dll | | |VirtualProtect | |
|50003FE4|rtl120.bpl |System.pas | |_ReallocMem |3512[0] |
|500093F6|rtl120.bpl |System.pas | |_LStrSetLength |15889[38]|
|50004508|rtl120.bpl |System.pas | |Move |4414[0] |
|5001DDB9|rtl120.bpl |SysUtils.pas | |StrLCopy |7852[5] |
|5007E559|rtl120.bpl |UxTheme.pas | |DrawThemeTextEx |5226[2] |
|5007E524|rtl120.bpl |UxTheme.pas | |DrawThemeTextEx |5224[0] |
|2110A98D|vclactnband120.bpl |ThemedActnCtrls.pas|TThemedMenuButton |DoDrawText |488[23] |
|50009E88|rtl120.bpl |System.pas | |_UStrClr |16961[0] |
|2110A9A2|vclactnband120.bpl |ThemedActnCtrls.pas|TThemedMenuButton |DoDrawText |490[25] |
|75FC7BFE|USER32.dll | | |CallNextHookEx | |
|20AA9C5E|designide120.bpl |DeskUtil.pas | |SetFocusHook |435[4] |
|210E8B83|vclactnband120.bpl |ActnMenus.pas | |CallWindowHook |741[20] |
|50057F7D|rtl120.bpl |Classes.pas |TComponent |UpdateAction |11881[1] |
|50006EE4|rtl120.bpl |System.pas | |_CallDynaInst |10209[0] |
|501EA802|vcl120.bpl |Forms.pas | |ProcessUpdate |6739[1] |
|50006F3C|rtl120.bpl |System.pas |TObject |InheritsFrom |10281[0] |
|50006E1A|rtl120.bpl |System.pas | |_IsClass |10107[1] |
|50006E0C|rtl120.bpl |System.pas | |_IsClass |10106[0] |
|501EA870|vcl120.bpl |Forms.pas | |TraverseClients3 |6756[5] |
|501EA818|vcl120.bpl |Forms.pas | |TraverseClients3 |6751[0] |
|501EA88A|vcl120.bpl |Forms.pas | |TraverseClients3 |6756[5] |
|50047748|rtl120.bpl |Classes.pas |TList |Get |3366[0] |
|501C865E|vcl120.bpl |Controls.pas |TWinControl |GetControl |8473[4] |
|50006F3C|rtl120.bpl |System.pas |TObject |InheritsFrom |10281[0] |
|50006E1A|rtl120.bpl |System.pas | |_IsClass |10107[1] |
|501C8668|vcl120.bpl |Controls.pas |TWinControl |GetControlCount |8478[0] |
|501EA87B|vcl120.bpl |Forms.pas | |TraverseClients3 |6756[5] |
|501EA818|vcl120.bpl |Forms.pas | |TraverseClients3 |6751[0] |
|501EA8E2|vcl120.bpl |Forms.pas |TCustomForm |CMActionUpdate |6778[11] |
|501C565A|vcl120.bpl |Controls.pas |TControl |WndProc |6642[91] |
|501C5388|vcl120.bpl |Controls.pas |TControl |WndProc |6551[0] |
|501C9CE7|vcl120.bpl |Controls.pas |TWinControl |WndProc |9336[136]|
|75FC7C2B|USER32.dll | | |CallNextHookEx | |
|75FCC477|USER32.dll | | |InvalidateRect | |
|75FCC41E|USER32.dll | | |InvalidateRect | |
|75FCC49D|USER32.dll | | |CallWindowProcW | |
|75FCC487|USER32.dll | | |CallWindowProcW | |
|205669A5|dbkdebugide120.bpl |Debug.pas |TDebugger |DBKWndProc |11595[3] |
|500591DC|rtl120.bpl |Classes.pas | |StdWndProc |12703[8] |
|75FC9467|USER32.dll | | |IsWindowVisible | |
|75FC8B0B|USER32.dll | | |DispatchMessageW | |
|75FC8B01|USER32.dll | | |DispatchMessageW | |
|501EEABD|vcl120.bpl |Forms.pas |TApplication |ProcessMessage |9660[30] |
|501EE9A0|vcl120.bpl |Forms.pas |TApplication |ProcessMessage |9630[0] |
|501EEB02|vcl120.bpl |Forms.pas |TApplication |HandleMessage |9690[1] |
|501EEAF8|vcl120.bpl |Forms.pas |TApplication |HandleMessage |9689[0] |
|501EEE2D|vcl120.bpl |Forms.pas |TApplication |Run |9827[26] |
|501EED64|vcl120.bpl |Forms.pas |TApplication |Run |9801[0] |
|004259E6|bds.exe |bds.dpr | |bds |198[8] |
|770CECC9|kernel32.dll | | |BaseThreadInitThunk | |
-----------------------------------------------------------------------------------------------------------

如您所见,所有调用堆栈都在 Delphi 和 Windows 中。它根本不连接回我的程序中的任何行。

我查看了网页:External Exception EEFFACE并将其从德语翻译成英语,但它似乎在谈论 Delphi C++,而我根本不使用 C++。

我的问题是我不知道是什么原因导致这种情况,因为它并没有持续发生。我什至不知道在哪里可以找到它或如何追踪它。

有人知道这是什么以及我如何追踪它或至少防止它发生吗?

<小时/>

EurekaLog 的 Alex 发布此内容是为了回复 my query on their forum :

I think it may be a bug in Delphi's debugger. Possibly related to evaluation tooltips or something similar.

See for yourself - we have an C++ exception in system module (EEFFACE is a special code for VCL exception. When VCL encounters an unknown C++ exception - it wraps it into EExternalException object with code = EEFFACE) and call stack includes Delphi debugger's units:

|205669C6|dbkdebugide120.bpl |Debug.pas |TDebugger |DBKWndProc |11598[6] |
|7705E0CB|kernel32.dll | | |RaiseException | |
|03E8E3E8|dcc120.dll |WRITEOBJ.OBJ | |C62_0 | |
|03E3066D|dcc120.dll |SYMTAB.OBJ | |MakeOverloadedPropertyList| |
|03E3064C|dcc120.dll |SYMTAB.OBJ | |MakeOverloadedPropertyList| |
|03E30D76|dcc120.dll |SYMTAB.OBJ | |EnterMethod | |
|03E30D6C|dcc120.dll |SYMTAB.OBJ | |FindBaseClassMethod | |
|03DE8D30|dcc120.dll |DECL.OBJ | |PatchConstRecordParameter | |
|03DBBF70|dcc120.dll |BROWCMGR.OBJ | |PutToAddress | |
|03DBC436|dcc120.dll |BROWCMGR.OBJ | |GetNearestSymName | |
|219C5BDA|win32debugide120.bpl|Win32Debug.pas |TWin32LinkUnit |GetCppDebugHook |1923[3] |
|219C5BB8|win32debugide120.bpl|Win32Debug.pas |TWin32LinkUnit |GetCppDebugHook |1920[0] |
|219C644E|win32debugide120.bpl|Win32Debug.pas |TWin32Process |DoLinkUnitCreated |2198[10] |
|50001CE4|rtl120.bpl |System.pas | |InterlockedIncrement |3200[0] |
|5000CD59|rtl120.bpl |System.pas |TInterfacedObject |_AddRef |21759[1] |
|2055F40F|dbkdebugide120.bpl |Debug.pas |TProcess |LinkUnitCreated |8454[1] |
|2055F408|dbkdebugide120.bpl |Debug.pas |TProcess |LinkUnitCreated |8453[0] |
|2055CEC7|dbkdebugide120.bpl |Debug.pas |TEvaluatorCallback|ntfyLinkUnitDelta |7167[7] |

I think that you should post this description to Embarcadero's Quality Central.

Try to disable "IDE integration" check-box (it's located in IDE's "EurekaLog"/"EurekaLog IDE Options" menu) and run your application - see if there will be a change in behavior.

<小时/>

我现在已向质量中心提交了一份报告:

http://qc.embarcadero.com/wc/qcmain.aspx?d=81881

希望有了这些信息,Embarcadero 能够在未来的版本中防止这种情况发生。

<小时/>

四年多后,我再次回到这个问题,并意识到几个月前,我找到了解决方案,因此我将其发布在这里,供其他可能遇到此问题的人使用。

Olaf Monien中提供了问题和解决方案的博客,在 2009 年 7 月 22 日发表的一篇题​​为 Delphi 2009/Windows 7/64 位调试器崩溃解决方法的文章中。

奥拉夫在那篇文章中的说明对我来说非常有效,问题就消失了。我在他的博客文章的评论中向他表示感谢。

正如 @rossmcm 在他的评论中指出的那样,Olaf 的博客文章不再存在,但是 the post can still be found on the Internet Archive 。相反,请查看Chris Miller's information about the problem (now also only available on the Internet Archive)其中包括指向 the patch tool that now has a permanent home at Embarcadero 的链接。

最佳答案

这显然是 Delphi 求值器(它是编译器的一部分)中发生的事情。奇怪的是,如果实际上是通过 writeobj.c,那么肯定有些事情不太正确。如果您可以通过测试用例重现此问题,请在 QualityCentral ( http://qc.embarcadero.com ) 中报告。

EEFFACE 是 C++ 使用的 SEH 异常代码,它“泄漏”到某些 Delphi 代码(在本例中为 IDE 本身)。当异常代码不是Delphi生成的异常或硬件相关的异常时,Delphi简单地将其映射到EExternalException。

关于delphi - Delphi 中的外部异常 EEFFACE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2197351/

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