Дебажде на здоровье!

ValeVale Россия, Магадан (солнечный)
отредактировано January 2005 Раздел: FastScript
Дебажде на здоровье!

Взять все это можно на http://valera135.narod.ru/
Там же и пример использования.

TfsScriptDebug - наследник TfsScript

TfsScriptDebug = class(TfsScript)
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure DbgExecute;
procedure ActivateDebugWindow;
property BreackPoints: TBreackPointCollection;
property IsRunScript: boolean;
published
{ Published declarations }
property DebugWindow: TForm;
property MinimizeOnRun: boolean;
property BreakType: TBreakType;
property OnBreakEvent: TBreakEvent;
property OnResolveUnit: TOnResolveUnitNameEvent;
property RTCLUnitName: string;
property RTCLLine: TLine;
end;

И так:

procedure DbgExecute;

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

procedure ActivateDebugWindow;

Вызов данной процедуры блокирует текущее окно программы и вывалакивает на свет божий окно дебагера. Повторный вызов возвращает все на круги своя!

property BreackPoints: TBreackPointCollection;

Собственно коллекция бряк поинтов! О возможностях бряк поинтов поговорим ниже.

property IsRunScript: boolean;

True – если выполняется под управлением метода DbgExecute.

property DebugWindow: TForm;

Ссылка на окно дебагера.

property MinimizeOnRun: boolean;

Скрывать окно дебагера при старте DbgExecute

property BreakType: TBreakType;

Тип трассирования скрипта. Может принимать следующие значения:
btNone – Выполняем без остановки
btTraceInfo – Выполняем одну строку кода и делаем остановку
btTraceToLine – Выполняем скрипт до RTCLLine строки модуля RTCLUnitName

Если во время выполнения нарываемся на контролбряк то сразу тормозим!

property OnBreakEvent: TBreakEvent;
Описание типа
TBreakEvent = function (Sender: TfsScript; const UnitName, SourcePos: String; BreakSuspend: TBreakSuspend; BreackPoint: TBreackPoint): TBreakType of object;

Событие вызываемое по достижению точки остановки.

Параметры
Sender: TfsScript; - это понятно без объяснений
UnitName, SourcePos: String; - ну это тоже…
BreakSuspend: TBreakSuspend; - Причина остановки! Здесь по подробнее…
(
bsTraceInfo – Пошаговая стратегия ;)
bsTraceToLine – Дошли до указанной строки.
bsBreakPoint – Нарвались на бряк поинт.
)
BreackPoint: TBreackPoint – В случае BreakSuspend= bsBreakPoint здесь ссылка на TBreackPoint

Данная функция должна вернуть тип следующей остановки TBreakType

Если функция возвращает btTraceToLine то она должна установить RTCLUnitName и RTCLLine.

property OnResolveUnit: TOnResolveUnitNameEvent;
Описание типа
TOnResolveUnitNameEvent = function (Sender: TfsScript; const UnitName: string): string of object;

Вызывается когда UnitName=’’. Дебагеру необходимо знать имя модуля.

property RTCLUnitName: string; - читай BreakType и OnBreakEvent
property RTCLLine: TLine; - читай BreakType и OnBreakEvent


Теперь о TBreackPoint!

TBreackPoint = class(TCollectionItem)
public
procedure Init(aUnitName: string; aSourcePos: TPoint);
procedure RestartIterration;
property UnitName: string;
property SourcePos: TPoint;
property IterrationCount: integer;
property IterrationCheck: boolean;
property Expression: string;
end;

procedure Init(aUnitName: string; aSourcePos: TPoint);

Инимциализация точки остановки, надеюсь параметры интуитивно понятны!

procedure RestartIterration;

В случае IterrationCheck данная процедура сбрасывает счетчик проходов через данную точку остановки.

property UnitName: string; - Имя модуля
property SourcePos: TPoint; - Строка в соурсе
property IterrationCount: integer; - Количество проходов по данной точке до остановки.
property IterrationCheck: boolean; - Проверять IterrationCount или нет!
property Expression: string; - Если есть выражение то остановиться при Expression = true



Ну а коллекция КонтролБряков надеюсь пояснять не нужно! Вот ее описание…

TBreackPointCollection = class(TCollection)
private
protected
public
function IndexBP(aUnitName: string; aSourcePos: TLine): integer; overload;
function IndexBP(aUnitName: string; aSourcePos: TPoint): integer; overload;
function IndexBP(aUnitName: string; aSourcePos: string): integer; overload;
function ThisLine(aScript: TfsScript; aUnitName: string; aSourcePos: string; IncIterration: boolean = true): boolean;
function GetBreackPoint(aScript: TfsScript; aUnitName: string; aSourcePos: string; IncIterration: boolean = true): TBreackPoint;
function ThisPoint(aScript: TfsScript; aUnitName: string; aSourcePos: string; IncIterration: boolean = true): boolean;
end;

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

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