What is this? http://www.beholdgenealogy.com/img/ideexception.gif
这只是偶尔发生,但按OK后,我的IDE和程序都可能冻结。如果我很幸运,我有时可以在Delphi中做一个File / SaveAll,但有时我不能。无论哪种方式我都被卡住,那么我唯一可以做的就是使用Windows任务管理器关闭Delphi。当然,如果我无法SaveAll,那么我失去了自上次保存以来所做的所有编辑。
我已经安装了包括Update 4在内的所有Delphi 2009更新。我还安装了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.
现在我向Quality Central递交了一份报告:
http://qc.embarcadero.com/wc/qcmain.aspx?d=81881
希望通过这些信息,Embarcadero可以在将来的版本中防止这种情况。
4年后我回到这个问题,并意识到,在几个月前,我找到了解决方案,所以我在这里发贴给任何可能遇到这个问题的人。
问题和解决方案在Olaf Monien的博客中提供,在2009/07/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,其中包括the patch tool that now has a permanent home at Embarcadero的链接。
解决方法
EEFFACE是C使用的SEH异常代码,它是“泄漏”到一些Delphi代码(在这种情况下是IDE本身)。当异常代码不是Delphi生成的异常或与硬件相关的异常时,Delphi会将其映射到EExternalException。