在Delphi XE中使用JCL时没有堆栈跟踪

3
我们有一个项目,我们将其从Delphi 2007转换为Delphi XE。在2007版本中,我们使用JCL的调试功能,在异常出现时得到堆栈跟踪。实际上,我们使用了JCL的标准ExceptionDlg向导,该向导依赖于以下行来获取堆栈跟踪:
StackList := JclLastExceptStackList;

这个东西在Delphi 2007中可以工作,但在XE中不能工作(会抛出“blank”堆栈)。

如果我们用传统的方式替换它

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

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

有什么想法可以解决这个问题吗?

TIA

1个回答

3
你是否调用了 JclStartExceptionTracking 方法?
这个方法似乎负责首先连接异常并添加通知器。
function JclStartExceptionTracking: Boolean;
begin
  if TrackingActive then
    Result := False
  else
  begin
    Result := JclHookExceptions and JclAddExceptNotifier(DoExceptNotify, npFirstChain);
    TrackingActive := Result;
  end;
end;

是的,我做到了。事实上,在生成的例程中自动调用它。 - John Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接