Наше приложение регистрирует исходную строку, вызывая исключение с JCL, и это прекрасно работает.
Я использую D2007. У меня есть событие TApplicationEvents.OnException, которые делают фактическое ведение журнала.
Учтите это:
function MyFunc: String;
begin
// Codelines that may raise exception.
// Call functions that also may raise exception
end;
procedure ComplexFunc(aVariable: String);
begin
// also here can it be exceptions....
// Code here that is the cause of exception
end;
procedure foo;
var
myVar: String;
begin
myvar := MyFunc;
ComplexFunc(myvar);
end;
procedure TMainForm.ApplicationEvents1Exception(Sender: TObject; E: Exception);
begin
LogLastException(E, 'Unhandled Exception (%s)', [E.Message], 20);
end;
У меня есть 3 метода и мое событие onException.
LogLastException регистрирует стек вызовов при возникновении исключения. Проблема в том, что я не могу добавить информацию в E.Message без потери исходной строки, которая вызывает исключение. Представьте, что это вторая строка в ComplexFunc, которая вызывает исключение. Я также хочу записать значение переменной myvar. Поэтому я изменяю код на:
function MyFunc: String;
begin
// Codelines that may raise exception.
// Call functions that also may raise exception
end;
procedure ComplexFunc(aVariable: String);
begin
// also here can it be exceptions....
// Code here that is the cause of exception
end;
procedure foo;
var
myVar: String;
begin
try
myvar := MyFunc;
ComplexFunc(myvar);
except
on E: Exception do
raise TException.CreateFmt('myvar = %s', [myvar]);
end;
end;
procedure TMainForm.ApplicationEvents1Exception(Sender: TObject; E: Exception);
begin
LogLastException(E, 'Unhandled Exception (%s)', [E.Message], 20);
end;
Теперь записывается значение myvar, НО по цене я теряю исходную линию исключения. Вместо этого регистрируется строка с повышением TException.CreateFmt. Любое предложение о том, как сделать оба?
Привет