PaxScripter demo application written in Delphi.NET which illustrates debug capabilities.
unit WinForm1;
interface
uses
System.Drawing, System.Collections, System.ComponentModel,
System.Windows.Forms, System.Data, PaxScript.Net;
type
TWinForm2 = class(System.Windows.Forms.Form)
{$REGION 'Designer Managed Code'}
strict private
components: System.ComponentModel.IContainer;
btnReset: System.Windows.Forms.Button;
btnRun: System.Windows.Forms.Button;
btnTraceInto: System.Windows.Forms.Button;
btnStepOver: System.Windows.Forms.Button;
btnAddBreakpoint: System.Windows.Forms.Button;
btnRemoveBreakpoint: System.Windows.Forms.Button;
PaxScripter1: PaxScript.Net.PaxScripter;
rtbScript: System.Windows.Forms.RichTextBox;
rtbState: System.Windows.Forms.RichTextBox;
procedure InitializeComponent;
procedure btnReset_Click(sender: System.Object; e: System.EventArgs);
procedure btnRun_Click(sender: System.Object; e: System.EventArgs);
procedure btnTraceInto_Click(sender: System.Object; e: System.EventArgs);
procedure btnStepOver_Click(sender: System.Object; e: System.EventArgs);
procedure btnAddBreakpoint_Click(sender: System.Object; e: System.EventArgs);
procedure btnRemoveBreakpoint_Click(sender: System.Object; e: System.EventArgs);
procedure PaxScripter1_OnChangeState(sender: PaxScript.Net.PaxScripter; e: PaxScript.Net.ChangeStateEventArgs);
{$ENDREGION}
strict protected
procedure Dispose(Disposing: Boolean); override;
private
{ Private Declarations }
procedure ShowInfo(sender: PaxScript.Net.PaxScripter; new_state: ScripterState);
public
constructor Create;
end;
[assembly: RuntimeRequiredAttribute(TypeOf(TWinForm2))]
implementation
{$REGION 'Windows Form Designer generated code'}
procedure TWinForm2.InitializeComponent;
begin
Self.components := System.ComponentModel.Container.Create;
Self.btnReset := System.Windows.Forms.Button.Create;
Self.btnRun := System.Windows.Forms.Button.Create;
Self.btnTraceInto := System.Windows.Forms.Button.Create;
Self.btnStepOver := System.Windows.Forms.Button.Create;
Self.btnAddBreakpoint := System.Windows.Forms.Button.Create;
Self.btnRemoveBreakpoint := System.Windows.Forms.Button.Create;
Self.PaxScripter1 := PaxScript.Net.PaxScripter.Create(Self.components);
Self.rtbScript := System.Windows.Forms.RichTextBox.Create;
Self.rtbState := System.Windows.Forms.RichTextBox.Create;
Self.SuspendLayout;
//
// btnReset
//
Self.btnReset.Location := System.Drawing.Point.Create(24, 8);
Self.btnReset.Name := 'btnReset';
Self.btnReset.Size := System.Drawing.Size.Create(128, 23);
Self.btnReset.TabIndex := 0;
Self.btnReset.Text := 'Reset';
Include(Self.btnReset.Click, Self.btnReset_Click);
//
// btnRun
//
Self.btnRun.Location := System.Drawing.Point.Create(24, 40);
Self.btnRun.Name := 'btnRun';
Self.btnRun.Size := System.Drawing.Size.Create(128, 23);
Self.btnRun.TabIndex := 1;
Self.btnRun.Text := 'Run';
Include(Self.btnRun.Click, Self.btnRun_Click);
//
// btnTraceInto
//
Self.btnTraceInto.Location := System.Drawing.Point.Create(24, 72);
Self.btnTraceInto.Name := 'btnTraceInto';
Self.btnTraceInto.Size := System.Drawing.Size.Create(128, 23);
Self.btnTraceInto.TabIndex := 2;
Self.btnTraceInto.Text := 'Trace Into';
Include(Self.btnTraceInto.Click, Self.btnTraceInto_Click);
//
// btnStepOver
//
Self.btnStepOver.Location := System.Drawing.Point.Create(24, 104);
Self.btnStepOver.Name := 'btnStepOver';
Self.btnStepOver.Size := System.Drawing.Size.Create(128, 23);
Self.btnStepOver.TabIndex := 3;
Self.btnStepOver.Text := 'Step Over';
Include(Self.btnStepOver.Click, Self.btnStepOver_Click);
//
// btnAddBreakpoint
//
Self.btnAddBreakpoint.Location := System.Drawing.Point.Create(24, 136);
Self.btnAddBreakpoint.Name := 'btnAddBreakpoint';
Self.btnAddBreakpoint.Size := System.Drawing.Size.Create(128, 23);
Self.btnAddBreakpoint.TabIndex := 4;
Self.btnAddBreakpoint.Text := 'Add Breakpoint';
Include(Self.btnAddBreakpoint.Click, Self.btnAddBreakpoint_Click);
//
// btnRemoveBreakpoint
//
Self.btnRemoveBreakpoint.Location := System.Drawing.Point.Create(24, 168);
Self.btnRemoveBreakpoint.Name := 'btnRemoveBreakpoint';
Self.btnRemoveBreakpoint.Size := System.Drawing.Size.Create(128, 23);
Self.btnRemoveBreakpoint.TabIndex := 5;
Self.btnRemoveBreakpoint.Text := 'Remove Breakpoint';
Include(Self.btnRemoveBreakpoint.Click, Self.btnRemoveBreakpoint_Click);
//
// PaxScripter1
//
Include(Self.PaxScripter1.OnChangeState, Self.PaxScripter1_OnChangeState);
//
// rtbScript
//
Self.rtbScript.Location := System.Drawing.Point.Create(176, 8);
Self.rtbScript.Name := 'rtbScript';
Self.rtbScript.Size := System.Drawing.Size.Create(368, 216);
Self.rtbScript.TabIndex := 6;
Self.rtbScript.Text := 'using System;'#10'class TestFactorial'#10'{'#10' public static long Factorial (long numb'+
'er)'#10' {'#10' if (number == 0)'#10' return 1;'#10' else'#10' '+
' return (number * Factorial (number - 1));'#10' }'#10' public static void Mai'+
'n()'#10' {'#10' Console.WriteLine("3 factorial is {0}", Factorial(3)); '#10' '+
'}'#10'}';
//
// rtbState
//
Self.rtbState.Anchor := (System.Windows.Forms.AnchorStyles((((System.Windows.Forms.AnchorStyles.Top
or System.Windows.Forms.AnchorStyles.Bottom) or System.Windows.Forms.AnchorStyles.Left)
or System.Windows.Forms.AnchorStyles.Right)));
Self.rtbState.Location := System.Drawing.Point.Create(8, 240);
Self.rtbState.Name := 'rtbState';
Self.rtbState.Size := System.Drawing.Size.Create(536, 160);
Self.rtbState.TabIndex := 7;
Self.rtbState.Text := '';
//
// TWinForm2
//
Self.AutoScaleBaseSize := System.Drawing.Size.Create(5, 13);
Self.ClientSize := System.Drawing.Size.Create(552, 414);
Self.Controls.Add(Self.rtbState);
Self.Controls.Add(Self.rtbScript);
Self.Controls.Add(Self.btnRemoveBreakpoint);
Self.Controls.Add(Self.btnAddBreakpoint);
Self.Controls.Add(Self.btnStepOver);
Self.Controls.Add(Self.btnTraceInto);
Self.Controls.Add(Self.btnRun);
Self.Controls.Add(Self.btnReset);
Self.Name := 'TWinForm2';
Self.Text := 'DebugApp';
Self.ResumeLayout(False);
end;
{$ENDREGION}
procedure TWinForm2.Dispose(Disposing: Boolean);
begin
if Disposing then
begin
if Components <> nil then
Components.Dispose();
end;
inherited Dispose(Disposing);
end;
constructor TWinForm2.Create;
begin
inherited Create;
InitializeComponent;
end;
procedure TWinForm2.ShowInfo(sender: PaxScript.Net.PaxScripter; new_state: ScripterState);
var
v: System.Object;
csr: CallStackRec;
bp: Breakpoint;
I: Integer;
s: String;
begin
s := '';
case new_state of
ScripterState.Init: s := 'Init';
ScripterState.Paused: s := 'Paused';
ScripterState.Terminated: s := 'Terminated';
end;
rtbState.Text := 'State: ' + s;
rtbState.Text := rtbState.Text + #10 + 'Module: ' + sender.CurrentModule;
rtbState.Text := rtbState.Text + #10 + 'Line ' + sender.CurrentLineNumber.ToString() +
' : ' + sender.CurrentLine;
v := nil;
if new_state = ScripterState.Paused then
begin
v := sender.Eval('number');
sender.DiscardError();
end;
if v = nil then
rtbState.Text := rtbState.Text + #10 + 'number = null'
else
rtbState.Text :=rtbState.Text + #10 + 'number = ' + v.ToString();
rtbState.Text := rtbState.Text + #10 + 'Call stack:';
for I:=0 to sender.Call_Stack.Count - 1 do
begin
csr := sender.Call_Stack[I];
rtbState.Text := rtbState.Text + #10 + csr.CallView + ' at line ' + csr.LineNumber.ToString();
end;
rtbState.Text := rtbState.Text + #10 + 'Breakpoints:';
for I:=0 to sender.Breakpoint_List.Count - 1 do
begin
bp := sender.Breakpoint_List[I];
rtbState.Text := rtbState.Text + #10 + 'Breakpoint at line ' + bp.LineNumber.ToString() +
', Activated = ' + bp.Activated.ToString();
end;
end;
procedure TWinForm2.PaxScripter1_OnChangeState(sender: PaxScript.Net.PaxScripter;
e: PaxScript.Net.ChangeStateEventArgs);
begin
if not sender.HasErrors then
ShowInfo(sender, e.NewState);
if e.NewState = ScripterState.Error then
MessageBox.Show('Error: ' + sender.Error_List[0].Message)
else if e.OldState = ScripterState.Init then
begin
sender.AddModule('1');
sender.AddCode('1', rtbScript.Text);
end;
end;
procedure TWinForm2.btnRemoveBreakpoint_Click(sender: System.Object; e: System.EventArgs);
begin
paxScripter1.RemoveAllBreakpoints();
ShowInfo(paxScripter1, paxScripter1.State);
end;
procedure TWinForm2.btnAddBreakpoint_Click(sender: System.Object; e: System.EventArgs);
begin
paxScripter1.AddBreakpoint('1', 5);
ShowInfo(paxScripter1, paxScripter1.State);
end;
procedure TWinForm2.btnStepOver_Click(sender: System.Object; e: System.EventArgs);
begin
paxScripter1.Run(RunMode.StepOver, []);
end;
procedure TWinForm2.btnTraceInto_Click(sender: System.Object; e: System.EventArgs);
begin
paxScripter1.Run(RunMode.TraceInto, []);
end;
procedure TWinForm2.btnRun_Click(sender: System.Object; e: System.EventArgs);
begin
paxScripter1.Run(RunMode.Run, []);
end;
procedure TWinForm2.btnReset_Click(sender: System.Object; e: System.EventArgs);
begin
paxScripter1.Reset();
end;
end.
Copyright © 1999-2007
VIRT Laboratory. All rights reserved.