Внешнее исключение EEFFACE в Delphi - PullRequest
19 голосов
/ 04 февраля 2010

При отладке моего приложения в Delphi 2009 иногда возникает следующее исключение:

What is this?
(источник: beholdgenealogy.com )

Это происходит только изредка, но после нажатия OK моя IDE и программа могут зависнуть. Если мне повезет, я иногда могу сделать File / SaveAll в Delphi, но иногда я не могу. В любом случае, я застрял, и тогда единственное, что я могу сделать, это использовать диспетчер задач Windows, чтобы завершить работу Delphi. Конечно, если я не смог сохранить все, то я потеряю все изменения, которые я сделал с момента последнего сохранения.

У меня установлены все обновления 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. Он вообще не подключается к какой-либо линии в моей программе.

Я посмотрел на веб-страницу: Внешнее исключение EEFFACE и перевел ее с немецкого на английский, но, похоже, речь идет о Delphi C ++, тогда как я вообще не использую C ++.

Моя проблема в том, что я понятия не имею, что может быть причиной этого, поскольку это не происходит последовательно. Я понятия не имею, даже где искать его или как отследить.

Кто-то знает, что это такое и как я могу отследить это или, по крайней мере, предотвратить это?


Алекс из EurekaLog разместил это в ответ на мой запрос на их форуме :

Я думаю, что это может быть ошибка в Delphi's отладчик. Возможно связано с подсказки оценки или что-то похоже.

Убедитесь сами - у нас есть C ++ исключение в системном модуле (EEFFACE специальный код для исключения VCL. когда VCL встречает неизвестный C ++ исключение - это оборачивает это в EExternalException объект с кодом = EEFFACE) и стек вызовов Единицы отладчика 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 Центральный.

Попробуйте отключить "интеграцию с IDE" флажок (он находится в IDE "EurekaLog" / "Опции EurekaLog IDE" меню) и запустите приложение - смотрите если будет изменение в поведении.


Я отправил отчет в Quality Central по адресу:

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

Надеемся, что благодаря этой информации Embarcadero сможет предотвратить это в будущих выпусках.


Я возвращаюсь к этому вопросу спустя 4 года и понимаю, что несколько месяцев назад я нашел решение, поэтому я публикую его здесь для всех, кто может столкнуться с этим.

Проблема и решение были предоставлены в блоге Олафа Моньена , в сообщении от 2009/07/22, озаглавленном Delphi 2009 / Windows 7/64-битный обходной путь отладчика.

Инструкции Олафа на этом посту отлично сработали, и проблема исчезла. Я поблагодарил его в комментарии к его сообщению в блоге.

Как отметил @rossmcm в своем комментарии, сообщения Олафа в блоге больше нет, но сообщение все еще можно найти в интернет-архиве . Вместо этого, посмотрите информацию Криса Миллера о проблеме , которая включает ссылку на инструмент исправления, который теперь имеет постоянное жилище на Embarcadero .

Ответы [ 5 ]

9 голосов
/ 04 февраля 2010

Это явно происходит в оценщике Delphi (который является частью компилятора). Странно то, что если, собственно, и происходит writeobj.c, то что-то не совсем верно. Если вы можете воспроизвести это с помощью контрольного примера, сообщите об этом в QualityCentral (http://qc.embarcadero.com).

EEFFACE - это код исключения SEH, используемый C ++, который «просачивается» в некоторый код Delphi (в данном случае в саму IDE). Если код исключения не является сгенерированным Delphi исключением или аппаратным исключением, Delphi просто сопоставляет его с EExternalException.

3 голосов
/ 31 октября 2011

Это не точный ответ, но он может помочь вам преодолеть ошибку, описав мой опыт работы с ней.

Я регулярно получал эту ошибку, когда переходил на Windows Vista и 7. Тот же код никогда не получал, чтосообщение об ошибке в Windows XP.Я мог поставить точку останова в первой строке файла dpr и обнаружил, что она всегда возникала при создании заставки для моих приложений.Я пробовал различные другие способы создания заставок, но они всегда в итоге приводили к ошибке EEFFACE при отладке.

Поэтому, чтобы преодолеть эту проблему, я теперь ставлю

if DebugHook = 0 then

при созданииполучить доступ к заставке.Заставка для моих приложений теперь не появляется, когда я отлаживаю, но по крайней мере я больше не получаю эту ошибку EEFFACE.

1 голос
/ 27 июля 2012

Кажется, что "Внешнее исключение" не является ошибкой Delphi, у меня было это исключение несколько раз назад, и, вероятно, это была проблема с материнской платой или с аппаратным обеспечением, потому что программа хорошо работала на другом компьютере.

0 голосов
/ 15 марта 2017

Я боролся с EEFFACE уже несколько недель. Наконец выяснилось, что причиной была эта инструкция:

PDFForgePDF.CopyPDFFile(pdffile,pdfcreatorfile,1,1);

содержимое переменных pdffile и pdfcreatorfile было одинаковым ....

Может быть, это может помочь какому-то бедному ублюдку, как я ...

0 голосов
/ 16 февраля 2017

Недавно я столкнулся с этим, и это как-то связано с Delphi IDE.Следующий код заканчивается в этом исключении в строке 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 дополнительная строка.Я не знаю, помогает ли это, но, возможно, в других случаях, когда необходима отладка, может быть, этот «трюк» может помочь.

...