Нет трассировки стека с использованием JCL в Delphi XE - PullRequest
3 голосов
/ 12 сентября 2011

У нас есть проект, который мы преобразовали из 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

1 Ответ

3 голосов
/ 12 сентября 2011

Вы звонили JclStartExceptionTracking?

Похоже, что этот метод в первую очередь отвечает за подключение исключений и добавление уведомителя.

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