Местоположение исключения в DelphiXE неправильно расположено в отладчике? - PullRequest
3 голосов
/ 31 июля 2011

Отладчик не находит строку исключения, ни в глубину, ни в конец.

Код:

procedure LoadLogo;
const
  RES_APP_LOGO = 'AppAboutLogo';
var
  resourceStream : TResourceStream;
begin
  try
    resourceStream := TResourceStream.Create( HInstance, RES_APP_LOGO, RES_TYPE_FXRESOURCES );
    resourceStream.Position := 0;
    ImageLogo.Picture.Bitmap.LoadFromStream(resourceStream); //---> causes exception (A)
    Refresh();
  finally
    FreeAndNil(resourceStream);    
  end;
end;

procedure TForm.Initialize;
begin

  //do something....

  LoadLogo(); //(C)

  AnotherFunction();  //<----- debugger points here (B)

end; 

procedure TForm.CreateCreate(Sender : TObject);
begin
  Initialize();
end;

В исключении в местоположении (A), где «Использовать DCU отладки» = false, отладчик указывает на (B) строку вне функции, вызываемой после возникновения исключения. С помощью «Использовать отладочные DCUs = true» он разрывается в универсальном метателе исключений в Graphics.pas. С классом исключения все в порядке, местоположение не является правильным или полезным с точки зрения отладки - ни местоположение вызова (C), ни точка реальной причины (A) не расположены.

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

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 31 июля 2011

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

Без отладочных DCU отладчик может разбить только строку кода, для которой он имеет отладочную информацию.Это должно быть где-то в вашем коде.

1 голос
/ 31 июля 2011

По моему опыту, если позиция остановки не совпадает с точкой останова, у вас есть проблема с видимостью исходного кода, то есть он вышел из-за компиляции.Также очень легко случайно открыть (немного другую) копию источника в IDE - это, кажется, сбивает с толку IDE и, если часто останавливается в этом окне, скомпилировано из другого окна.

...