Delphi2007: сбой при продолжении приостановленного приложения в отладчике - PullRequest
9 голосов
/ 03 марта 2011

У нас часто возникают сбои при запуске приложения в отладчике D2007, его приостановке и продолжении (нажатием клавиши F9).Например,

  • создать приложение VCL
  • , добавить TButton и TEdit в основную форму
  • добавить этот обработчик OnClick для Button1:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
    begin
      while True do
      begin
        for i := 0 to 9999 do
          Edit1.Text := IntToStr(Random(i));
        Application.ProcessMessages;
      end;
    end;
    
  • сохранить и отладить приложение
  • нажать кнопку1
  • , фокусировать IDE
  • нажать кнопку «Пауза»
  • нажать F9.

Почти всегда мы получаем нарушение доступа.Я проверял это под Windows 7 / 64bit, мой коллега под XP / 32bit.В D2006 моего коллеги мы не смогли воспроизвести эту ошибку.

Можете ли вы воспроизвести это?Есть идеи как это исправить?

1 Ответ

2 голосов
/ 03 марта 2011

У нас также есть это время от времени в D2010 (и в D2007 раньше), но я не мог воспроизвести это. (мы тоже используем Win7 64bit) Я постараюсь воспроизвести это с вашим тестовым приложением, спасибо! Теперь надеюсь, что это можно как-то решить ...

Редактировать: невозможно воспроизвести это в D2010 ... попробую D2007

Edit2: но я могу воспроизвести это в D2007!
Я также получаю некоторые странные ошибки в журнале событий:

Debug Output:    *** A stack buffer overrun occurred in   "C:\test\Project7.exe" :   Process Project7.exe (2584)
Debug Output: This is usually the result of a memory copy to a local buffer or structure where the size is not properly calculated/checked.  Process Project7.exe (2584)
Debug Output: If this bug ends up in the shipping product, it could be a severe security hole.  Process Project7.exe (2584)
Debug Output: The stack trace should show the guilty function (the function directly above __report_gsfailure).  Process Project7.exe (2584)
Debug Output:  *** enter .exr 772B43D0 for the exception record  Process Project7.exe (2584)
Debug Output:  *** then kb to get the faulting stack   Process Project7.exe (2584)

Когда я использую мое средство просмотра стека (http://code.google.com/p/asmprofiler/wiki/ProcessStackViewer) и необработанную трассировку стека текущего потока Delphi (который дал ошибку?), Я вижу следующий стек:

[772791B3]{ntdll.dll   } RtlUnhandledExceptionFilter + $12
[7725CDF4]{ntdll.dll   } Unknown function at CsrVerifyRegion + $1B0
[771D28A6]{ntdll.dll   } memcpy + $5E6
[7725CDE4]{ntdll.dll   } Unknown function at CsrVerifyRegion + $1A0
[7725CDF4]{ntdll.dll   } Unknown function at CsrVerifyRegion + $1B0
[77243509]{ntdll.dll   } Unknown function at RtlUlonglongByteSwap + $16299
[771F6AC9]{ntdll.dll   } Unknown function at RtlDosSearchPath_Ustr + $ADA
[771F6ADD]{ntdll.dll   } Unknown function at RtlDosSearchPath_Ustr + $AEE
[771F6A9B]{ntdll.dll   } Unknown function at RtlDosSearchPath_Ustr + $AAC
[77220AE5]{ntdll.dll   } Unknown function at WinSqmSetIfMaxDWORD + $35
[771F6A3D]{ntdll.dll   } Unknown function at RtlDosSearchPath_Ustr + $A4E
[77220AE5]{ntdll.dll   } Unknown function at WinSqmSetIfMaxDWORD + $35
[6E931AE0]{AcLayers.DLL} Unknown function at NotifyShims + $73B6
[771C010F]{ntdll.dll   } KiUserExceptionDispatcher + $F
[6E931AE0]{AcLayers.DLL} Unknown function at NotifyShims + $73B6
[771E9960]{ntdll.dll   } Unknown function at RtlQueryEnvironmentVariable + $241
[6E8E0000]{AcLayers.DLL}  + $0
[771EA172]{ntdll.dll   } Unknown function at RtlAllocateActivationContextStack + $1CF
[6E8E1FFF]{AcLayers.DLL}  + $0
[6E8E0000]{AcLayers.DLL}  + $0
[768F4AF9]{ole32.dll   } Unknown function at ObjectStublessClient31 + $4AF6
[772B206C]{ntdll.dll   } NlsAnsiCodePage + $205C
[771EA14C]{ntdll.dll   } Unknown function at RtlAllocateActivationContextStack + $1A9
[6E8E1FFF]{AcLayers.DLL}  + $0
[77220AE5]{ntdll.dll   } Unknown function at WinSqmSetIfMaxDWORD + $35
[771E9E5C]{ntdll.dll   } Unknown function at RtlDecodePointer + $F7
[768F4B4D]{ole32.dll   } Unknown function at ObjectStublessClient31 + $4B4A
[77220AE5]{ntdll.dll   } Unknown function at WinSqmSetIfMaxDWORD + $35
[771E9E89]{ntdll.dll   } LdrInitializeThunk + $10
[771B0000]{ntdll.dll   }  + $0
[771B0000]{ntdll.dll   }  + $0
[7720EAB0]{ntdll.dll   } RtlExitUserThread + $0
[771C0190]{ntdll.dll   } RtlUserThreadStart + $0

Я искал "AcLayers.DLL" (потому что мне это тоже кажется немного странным) Я нашел статью (http://www.nynaeve.net/?p=62) о режиме совместимости с Vista и странных сбоях ... Вероятно, D2007 не совместим с Win7?

Редактировать 3: когда я запускаю D2007 без режима совместимости (?, Просто запускаю exe, не используя закрепленный элемент на панели задач!), Я получаю ту же ошибку реже, и в стеке больше не отображается AcLayers.DLL, но я не могу понять, что происходит тогда (нужно больше расследований, сейчас у меня нет больше времени на это)

...