3

我们有一个从 Delphi 2007 转换为 Delphi XE 的项目。在 2007 版本中,我们使用 JCL 的调试功能在出现异常时进行堆栈跟踪。事实上,我们使用了 JCL 的标准ExceptionDlg向导,它依赖于以下行来获取堆栈跟踪:

StackList := JclLastExceptStackList;

这个东西曾经在 Delphi 2007 中工作,但在 XE 中不再工作(它抛出一个“空白”堆栈)。

如果我们用经典替换那个东西

   StackList := JclCreateStackList(false,0,Caller(0,false));
   lTemp := TStringList.Create;
   StackList.AddToStrings(lTemp,true,true,true,true);
   ShowMessage(lTemp.Text);
   lTemp.Free;
   Stacklist.Free;

...它可以工作(因此我们有正确的设置 WRT 到地图等),但是(不幸的是)它显示了当前的堆栈跟踪(当然,这会导致异常对话框)而不是最后的堆栈跟踪例外。

任何想法如何解决这一问题?

TIA

4

1 回答 1

3

你打电话了JclStartExceptionTracking吗?

似乎这个方法首先负责连接异常并添加通知程序。

function JclStartExceptionTracking: Boolean;
begin
  if TrackingActive then
    Result := False
  else
  begin
    Result := JclHookExceptions and JclAddExceptNotifier(DoExceptNotify, npFirstChain);
    TrackingActive := Result;
  end;
end;
于 2011-09-12T10:27:46.610 回答