Delphi 2009を使用してアプリケーションをデバッグしているときに、次の例外が発生することがあります。
(出典: beholdgenealogy.com )
これはたまにしか発生しませんが、[OK]を押すと、IDEとプログラムの両方がフリーズする可能性があります。運が良ければ、DelphiでFile/SaveAllを実行できる場合もありますが、実行できない場合もあります。いずれにせよ、行き詰まり、Windowsタスクマネージャーを使用してDelphiをシャットダウンするしかありません。もちろん、SaveAllを実行できなかった場合は、最後に保存してから行った編集内容がすべて失われます。
Update4までのすべてのDelphi2009 Updateをインストールしています。また、IDE Fix Pack 20092.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 そしてそれをドイツ語から英語に翻訳しました、しかしそれは私がC++を全く使用しないのに対してDelphiC++について話しているようです。
私の問題は、これが一貫して発生しないため、何が原因であるかわからないことです。どこで見つけたらいいのか、どうやって追跡するのかさえわからない。
誰かがこれが何であるか、そして私がそれを追跡する方法、または少なくともそれが起こるのを防ぐ方法を知っていますか?
EurekaLogのAlexは、これに応えて投稿しました 彼らのフォーラムでの私の質問 :
Delphiのデバッガのバグかもしれないと思います。評価ツールチップなどに関連している可能性があります。
システムモジュールにC++例外があり(EEFFACEはVCL例外の特別なコードです。VCLが不明なC++例外を検出すると、コード= EEFFACEのEExternalExceptionオブジェクトにラップします)、コールスタックにはDelphiデバッガーのユニットが含まれます。
|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] |
この説明をEmbarcaderoのQualityCentralに投稿する必要があると思います。
「IDE統合」チェックボックス(IDEの「EurekaLog」/「EurekaLog IDEオプション」メニューにあります))を無効にして、アプリケーションを実行してみてください。動作に変化があるかどうかを確認してください。
私は今、次の場所でQualityCentralにレポートを提出しました。
http://qc.embarcadero.com/wc/qcmain.aspx?d=81881
うまくいけば、この情報で、Embarcaderoは将来のリリースでこれを防ぐことができるでしょう。
私は4年以上後にこの質問に戻り、数か月前に解決策を見つけたので、これに遭遇する可能性のある他の人のためにここに投稿します。
問題と解決策は、 Olaf Monien のブログ、2009/07/22からのDelphi 2009/Windows 7/64ビットデバッガクラッシュ回避策というタイトルの投稿で提供されました。
その投稿に関するOlafの指示は私にとって完璧に機能し、問題はなくなりました。彼のブログ投稿へのコメントで彼に感謝しました。
@rossmcmが彼のコメントで指摘しているように、Olafのブログ投稿はもうありませんが、 投稿はまだインターネットアーカイブにあります 。代わりに、 問題に関するChris Millerの情報(現在はインターネットアーカイブでのみ利用可能) へのリンクが含まれています 現在Embarcaderoに恒久的な家があるパッチツール 。
これは明らかにDelphiエバリュエーター(コンパイラーの一部)で起こっていることです。奇妙なことに、実際にwriteobj.cを通過している場合、何かが完全に正しくないことは確かです。テストケースでこれを再現できる場合は、QualityCentral( http://qc.embarcadero.com )で報告してください。
EEFFACEは、C++で使用されるSEH例外コードであり、一部のDelphiコード(この場合はIDE自体)に「リーク」しています。例外コードがDelphiで生成された例外ではない場合、またはハードウェア関連の例外であるDelphiは、単にそれをEExternalExceptionにマップします。
これは正確な答えではありませんが、私の経験を説明することでエラーを克服するのに役立つかもしれません。
Windows Vistaおよび7にアクセスしたときに、このエラーが定期的に発生しました。同じコードがWindowsXPでこのエラーメッセージを受信することはありませんでした。 dprファイルの最初の行にブレークポイントを置くことができましたが、アプリケーションにスプラッシュ画面を作成するときに常にブレークポイントが発生しているように見えました。スプラッシュ画面を作成するために他のさまざまな方法を試しましたが、デバッグ時に常に最終的にEEFFACEエラーが発生しました。
だからこの問題を克服するために、私は今
if DebugHook = 0 then
スプラッシュ画面を作成してアクセスするとき。デバッグ中にアプリケーションのスプラッシュ画面が表示されなくなりましたが、少なくともそのEEFFACEエラーは発生しなくなりました。
「外部例外」はDelphiのバグではないようです。この例外は数回前に発生しました。プログラムが他のマシンで正常に機能したため、マザーボードまたはハードウェアに問題があった可能性があります。
最近私はこれに遭遇しました、そしてそれはどういうわけかDelphiIDEに関連しています。次のコードは、ShellExecute行でこの例外になります。
url:='https://translate.google.com/#hu/en/%C3%A1';
ShellExecute(0,PChar('open'),PChar(url),nil,nil,SW_SHOWNORMAL);
しかし、これはそうではありません:
url:='https://translate.google.com/#hu/en/%C3%A1';
ShowMessage(url);
ShellExecute(0,PChar('open'),PChar(url),nil,nil,SW_SHOWNORMAL);
しかし、アプリをIDEの外で実行すると、ShowMessageの余分な行がなくてもすべて問題ありません。それが役立つかどうかはわかりませんが、デバッグが必要な他の場合には、この「トリック」かもしれません。助けることができます。
システム:Dell Optiplex、Intel Core2Duo、Win7 x64、Delphi 7
私は何週間もEEFFACEと格闘してきました。最後に、原因が次の命令であることがわかりました。
PDFForgePDF.CopyPDFFile(pdffile,pdfcreatorfile,1,1);
変数pdffileとpdfcreatorfileの内容は同じでした..。
多分これは私のようないくつかの貧しいバガーを助けることができます...