2011-09-12 59 views
2

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

StackList := JclLastExceptStackList; 

使用德尔福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; 

...它的工作原理(因此,我们有正确的setings WRT到地图等),但(可惜的是)它显示目前堆栈跟踪(当然,这导致异常对话框)和而不是末尾的堆栈跟踪异常。

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

TIA

回答

3

你叫JclStartExceptionTracking

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

function JclStartExceptionTracking: Boolean; 
begin 
    if TrackingActive then 
    Result := False 
    else 
    begin 
    Result := JclHookExceptions and JclAddExceptNotifier(DoExceptNotify, npFirstChain); 
    TrackingActive := Result; 
    end; 
end; 
+0

是的,我做到了。实际上它在生成的例程中被自动调用。 –