Ignore:
Timestamp:
Feb 19, 2012, 9:44:58 AM (13 years ago)
Author:
chronos
Message:
  • Modified: Redone brakepoint system for system stepping breakpoints. Now system breakpoint are managed using BreakPoints filed in TTarget.
  • Added: Program can be started using Step in, Step over and Run to cursor actions.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Forms/UMainForm.pas

    r35 r36  
    120120    procedure AProgramPauseExecute(Sender: TObject);
    121121    procedure AProgramRunToCursorExecute(Sender: TObject);
     122    procedure AProgramRunExecute(Sender: TObject);
    122123    procedure AProgramShowExecutionPointExecute(Sender: TObject);
    123124    procedure AProgramStepIntoExecute(Sender: TObject);
     
    130131    procedure AProjectSaveAsExecute(Sender: TObject);
    131132    procedure AProjectSaveExecute(Sender: TObject);
    132     procedure AProgramRunExecute(Sender: TObject);
    133133    procedure AShowSourcePositionExecute(Sender: TObject);
    134134    procedure AShowTargetPositionExecute(Sender: TObject);
     
    155155    procedure ProjectOpen(FileName: string);
    156156    procedure SetCurrentTarget(AValue: TTarget);
     157    procedure UpdateToolBarHints;
    157158  public
    158159    Modified: Boolean;
    159160    ProjectFileName: string;
    160     BreakPoints: TListInteger;
    161161    Targets: TTargetList;
    162162    LastOpenedList: TLastOpenedList;
     
    195195    else AProjectNew.Execute;
    196196  UpdateInterface;
     197  UpdateToolBarHints;
     198  UpdateTargetList;
    197199end;
    198200
     
    266268  FCurrentTarget.OnChangeState := TargetStateChanged;
    267269  UpdateInterface;
     270end;
     271
     272procedure TMainForm.UpdateToolBarHints;
     273var
     274  I: Integer;
     275begin
     276  for I := 0 to ToolBar1.ControlCount - 1 do
     277    ToolBar1.Controls[I].Hint := ToolBar1.Controls[I].Caption;
    268278end;
    269279
     
    327337  AProgramCompile.Enabled := (tcCompile in CurrentTarget.Capabilities);
    328338  AProgramStepInto.Enabled := (tcStepInto in CurrentTarget.Capabilities) and
    329     (ProjectFileName <> '') and (CurrentTarget.State = rsPaused);
     339    (ProjectFileName <> '') and ((CurrentTarget.State = rsPaused) or (CurrentTarget.State = rsStopped));
    330340  AProgramStepOut.Enabled := (tcStepOut in CurrentTarget.Capabilities) and
    331341    (ProjectFileName <> '') and (CurrentTarget.State = rsPaused);
    332342  AProgramRunToCursor.Enabled := (tcRunToCursor in CurrentTarget.Capabilities) and
    333     (ProjectFileName <> '') and (CurrentTarget.State = rsPaused);
     343    (ProjectFileName <> '') and ((CurrentTarget.State = rsPaused) or (CurrentTarget.State = rsStopped));
    334344  AProgramStepOver.Enabled := (tcStepOver in CurrentTarget.Capabilities) and
    335     (ProjectFileName <> '') and (CurrentTarget.State = rsPaused);
     345    (ProjectFileName <> '') and ((CurrentTarget.State = rsPaused) or (CurrentTarget.State = rsStopped));
    336346  AProgramShowExecutionPoint.Enabled := (tcPause in CurrentTarget.Capabilities) and
    337347    (ProjectFileName <> '') and (CurrentTarget.State = rsPaused);
     
    339349  AShowTargetPosition.Enabled := CurrentTarget.Compiled;
    340350  UpdateStatusBar;
    341   UpdateTargetList;
    342351end;
    343352
     
    364373procedure TMainForm.FormCreate(Sender: TObject);
    365374begin
    366   BreakPoints := TListInteger.Create;
    367375  Targets := TTargetList.Create;
    368376  Targets.Add(TTargetInterpretter.Create);
     
    382390  LastOpenedList.Free;
    383391  Targets.Free;
    384   BreakPoints.Free;
    385392end;
    386393
     
    391398  if CurrentTarget is TTargetInterpretter then
    392399    TTargetInterpretter(CurrentTarget).Input := InterpreterForm.MemoInput.Lines.Text;
    393   CurrentTarget.SourceCode := MemoSource.Text;
    394400  if not CurrentTarget.Compiled then AProgramCompile.Execute;
    395401  CurrentTarget.Run;
     
    521527
    522528procedure TMainForm.ABreakpointToggleExecute(Sender: TObject);
    523 begin
    524   //BreakPoints.Add();
     529var
     530  DebugStep: TDebugStep;
     531  BreakPoint: TBreakPoint;
     532begin
     533  DebugStep := CurrentTarget.DebugSteps.SearchBySourcePos(MemoSource.SelStart);
     534  if Assigned(DebugStep) then begin
     535    BreakPoint := CurrentTarget.BreakPoints.SearchByTargetPos(DebugStep.TargetPosition);
     536    if Assigned(BreakPoint) then
     537      CurrentTarget.BreakPoints.Delete(CurrentTarget.BreakPoints.IndexOf(BreakPoint))
     538      else CurrentTarget.BreakPoints.AddItem(DebugStep.TargetPosition);
     539  end;
    525540end;
    526541
    527542procedure TMainForm.AProgramPauseExecute(Sender: TObject);
    528543begin
    529   CurrentTarget.Pause
     544  CurrentTarget.Pause;
    530545end;
    531546
     
    535550begin
    536551  DebugStep := CurrentTarget.DebugSteps.SearchBySourcePos(MemoSource.SelStart);
    537   CurrentTarget.RunToCursor(DebugStep.TargetPosition);
     552  if CurrentTarget.State = rsStopped then begin
     553    if not CurrentTarget.Compiled then AProgramCompile.Execute;
     554    CurrentTarget.BreakPoints.SetSystem(DebugStep.TargetPosition);
     555    AProgramRun.Execute;
     556  end else CurrentTarget.RunToCursor(DebugStep.TargetPosition);
    538557end;
    539558
     
    545564  MemoSource.SelStart := DebugStep.SourcePosition;
    546565  MemoTarget.SelStart := DebugStep.TargetPosition;
     566  if PageControl1.TabIndex = 0 then MemoSource.SetFocus;
     567  if PageControl1.TabIndex = 1 then MemoTarget.SetFocus;
    547568end;
    548569
    549570procedure TMainForm.AProgramStepIntoExecute(Sender: TObject);
    550571begin
    551   CurrentTarget.StepInto;
     572  if CurrentTarget.State = rsStopped then begin
     573    if not CurrentTarget.Compiled then AProgramCompile.Execute;
     574    CurrentTarget.BreakPoints.SetSystem(TDebugStep(CurrentTarget.DebugSteps.First).TargetPosition);
     575    AProgramRun.Execute;
     576  end else CurrentTarget.StepInto;
    552577end;
    553578
     
    559584procedure TMainForm.AProgramStepOverExecute(Sender: TObject);
    560585begin
    561   CurrentTarget.StepOver;
     586  if CurrentTarget.State = rsStopped then begin
     587    if not CurrentTarget.Compiled then AProgramCompile.Execute;
     588    CurrentTarget.BreakPoints.SetSystem(TDebugStep(CurrentTarget.DebugSteps.First).TargetPosition);
     589    AProgramRun.Execute;
     590  end else CurrentTarget.StepOver;
    562591end;
    563592
Note: See TracChangeset for help on using the changeset viewer.