Runtime ошибки
Проблема с определением места ошибки при выполнении скрипта.
Во-первых fsScript.ErrorPos и fsScript.ErrorUnit доступны только на этапе компиляции, а не выполнения.
Ладно, в событии OnRunLine запоминаем fsScript.UnitName и fsScript.SourcePos.
По идее это и будет место ошибки.
Во-вторых такая схема не работает если возникла ошибка внутри блока try..finally
Например:
A:=A/B;
а на строку
C:=1;
Так как правильно определить место runtime ошибки?
Во-первых fsScript.ErrorPos и fsScript.ErrorUnit доступны только на этапе компиляции, а не выполнения.
Ладно, в событии OnRunLine запоминаем fsScript.UnitName и fsScript.SourcePos.
По идее это и будет место ошибки.
Во-вторых такая схема не работает если возникла ошибка внутри блока try..finally
Например:
procedure CallError;
var A,B:double;
begin
B:=0;
A:=1;
A:=A/B;
end;
var C:double;
begin
try
CallError;
finally
C:=1;
end;
end.
последний SourcePos будет указыват не на строкуA:=A/B;
а на строку
C:=1;
Так как правильно определить место runtime ошибки?
Комментарии
Запоминаем последние 2, 3 ... 33 строки?!
Может имеет смысл сделать событие OnException?