Дебажде на здоровье!
Vale
Россия, Магадан (солнечный)
Дебажде на здоровье!
Взять все это можно на 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;
Взять все это можно на 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;