Runtime ошибки

отредактировано 13:59 Раздел: FastScript
Проблема с определением места ошибки при выполнении скрипта.

Во-первых 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 ошибки?


Комментарии

  • VIRVIR
    отредактировано 13:59
    Блок finally вызывает событие OnRunLine. Нужно смотреть предыдущее значение строки
  • отредактировано 13:59
    Ага, а если try..finally вложенные?
    Запоминаем последние 2, 3 ... 33 строки?! ;)
    Может имеет смысл сделать событие OnException?

  • отредактировано 13:59
    Поддерживаю идею с OnException. Сам напарился со скриптами. Хорошая мысль.
  • VIRVIR
    отредактировано 13:59
    CasualVisitor написал:
    Может имеет смысл сделать событие OnException?
    Идея безусловно хорошая. Хотелось бы увидеть ее реализацию.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.