DelphiXE中的异常位置在调试器中没有正确定位



调试器没有定位到异常所在行,它要么太深,要么太迟。

代码:

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)的异常上,使用"Use Debug dcu " = false,调试器指向(B),异常发生后调用的函数外面的行。使用"Use Debug DCUs = true",它会在Graphics.pas中出现通用异常抛出器。异常类没有问题,但从调试的角度来看,位置不正确或不有用——既没有找到调用位置(C),也没有找到真正的原因点(a)。

这需要查看调用堆栈以退回到似乎不正确的原因。

任何想法?

当您使用调试dcu时,您需要使用调用堆栈来查看执行如何到达抛出。在抛出异常之前,调试器没有办法中断。

没有调试dcu,调试器只能在具有调试信息的代码行中断。它一定在你的代码里

根据我的经验,如果停止位置看起来与断点不匹配,则源代码的可见性存在问题,即它与编译不一致。也很容易在IDE中意外打开源代码的副本(略有不同)-这似乎会混淆IDE,并且通常会在从另一个窗口编译的窗口中停止。

最新更新