Browse Source

* Get RegisterView to Update correctly
* Write in white changed regs (keeping a copy of previous values)

pierre 25 years ago
parent
commit
9bb8114818
1 changed files with 75 additions and 37 deletions
  1. 75 37
      ide/text/fpdebug.pas

+ 75 - 37
ide/text/fpdebug.pas

@@ -244,8 +244,16 @@ type
       destructor  Done; virtual;
       destructor  Done; virtual;
     end;
     end;
 
 
+  type
+     TIntRegs = record
+        eax,ebx,ecx,edx,eip,esi,edi,esp,ebp : dword;
+        cs,ds,es,ss,fs,gs : word;
+        eflags : dword;
+     end;
+
     PRegistersView = ^TRegistersView;
     PRegistersView = ^TRegistersView;
     TRegistersView = object(TView)
     TRegistersView = object(TView)
+      OldReg : TIntRegs;
       constructor Init(var Bounds: TRect);
       constructor Init(var Bounds: TRect);
       procedure   Draw;virtual;
       procedure   Draw;virtual;
       destructor  Done; virtual;
       destructor  Done; virtual;
@@ -404,6 +412,8 @@ procedure UpdateDebugViews;
        StackWindow^.Update;
        StackWindow^.Update;
      If assigned(RegistersWindow) then
      If assigned(RegistersWindow) then
        RegistersWindow^.Update;
        RegistersWindow^.Update;
+     If assigned(Debugger) then
+       Debugger^.ReadWatches;
   end;
   end;
 
 
 constructor TDebugController.Init(const exefn:string);
 constructor TDebugController.Init(const exefn:string);
@@ -433,6 +443,7 @@ begin
 end;
 end;
 
 
 procedure TDebugController.ReadWatches;
 procedure TDebugController.ReadWatches;
+
   procedure DoRead(PB : PWatch);
   procedure DoRead(PB : PWatch);
   begin
   begin
     PB^.Get_new_value;
     PB^.Get_new_value;
@@ -578,7 +589,6 @@ begin
   if error then
   if error then
     begin
     begin
        errornb:=error_num;
        errornb:=error_num;
-       ReadWatches;
        UpdateDebugViews;
        UpdateDebugViews;
        ErrorBox(#3'Error within GDB'#13#3'Error code = %d',@errornb);
        ErrorBox(#3'Error within GDB'#13#3'Error code = %d',@errornb);
     end;
     end;
@@ -606,7 +616,6 @@ begin
           W^.Editor^.SetCurPtr(0,Line);
           W^.Editor^.SetCurPtr(0,Line);
           W^.Editor^.TrackCursor(true);
           W^.Editor^.TrackCursor(true);
           W^.Editor^.SetDebuggerRow(Line);
           W^.Editor^.SetDebuggerRow(Line);
-          ReadWatches;
           UpdateDebugViews;
           UpdateDebugViews;
 
 
           if Not assigned(GDBWindow) or not GDBWindow^.GetState(sfActive) then
           if Not assigned(GDBWindow) or not GDBWindow^.GetState(sfActive) then
@@ -624,7 +633,6 @@ begin
           W^.Editor^.SetDebuggerRow(Line);
           W^.Editor^.SetDebuggerRow(Line);
           W^.Editor^.TrackCursor(true);
           W^.Editor^.TrackCursor(true);
           UpdateDebugViews;
           UpdateDebugViews;
-          ReadWatches;
           if Not assigned(GDBWindow) or not GDBWindow^.GetState(sfActive) then
           if Not assigned(GDBWindow) or not GDBWindow^.GetState(sfActive) then
             W^.Select;
             W^.Select;
           LastSource:=W;
           LastSource:=W;
@@ -647,7 +655,6 @@ begin
               W:=TryToOpenFile(nil,fn,0,Line,true);
               W:=TryToOpenFile(nil,fn,0,Line,true);
               W^.Editor^.SetDebuggerRow(Line);
               W^.Editor^.SetDebuggerRow(Line);
               W^.Editor^.TrackCursor(true);
               W^.Editor^.TrackCursor(true);
-              ReadWatches;
               UpdateDebugViews;
               UpdateDebugViews;
               if Not assigned(GDBWindow) or not GDBWindow^.GetState(sfActive) then
               if Not assigned(GDBWindow) or not GDBWindow^.GetState(sfActive) then
                 W^.Select;
                 W^.Select;
@@ -2204,13 +2211,6 @@ end;
                          TRegistersView
                          TRegistersView
 ****************************************************************************}
 ****************************************************************************}
 
 
-  type
-     TIntRegs = record
-        eax,ebx,ecx,edx,eip,esi,edi,esp,ebp : dword;
-        cs,ds,es,ss,fs,gs : word;
-        eflags : dword;
-     end;
-
   function GetIntRegs(var rs : TIntRegs) : boolean;
   function GetIntRegs(var rs : TIntRegs) : boolean;
 
 
     var
     var
@@ -2262,7 +2262,8 @@ end;
                         rs.esp:=v
                         rs.esp:=v
                       else if reg='ebp' then
                       else if reg='ebp' then
                         rs.ebp:=v
                         rs.ebp:=v
-                      else if reg='eflags' then
+                      { under win32 flags are on a register named ps !! PM }
+                      else if (reg='eflags') or (reg='ps') then
                         rs.eflags:=v
                         rs.eflags:=v
                       else if reg='cs' then
                       else if reg='cs' then
                         rs.cs:=v
                         rs.cs:=v
@@ -2307,6 +2308,15 @@ end;
 
 
     var
     var
        rs : tintregs;
        rs : tintregs;
+       color :byte;
+
+    procedure SetColor(x,y : longint);
+    begin
+      if x=y then
+        color:=7
+      else
+        color:=8;
+    end;
 
 
     begin
     begin
        inherited draw;
        inherited draw;
@@ -2317,29 +2327,53 @@ end;
          end;
          end;
        if GetIntRegs(rs) then
        if GetIntRegs(rs) then
          begin
          begin
-            WriteStr(1,0,'EAX '+HexStr(rs.eax,8),7);
-            WriteStr(1,1,'EBX '+HexStr(rs.ebx,8),7);
-            WriteStr(1,2,'ECX '+HexStr(rs.ecx,8),7);
-            WriteStr(1,3,'EDX '+HexStr(rs.edx,8),7);
-            WriteStr(1,4,'EIP '+HexStr(rs.eip,8),7);
-            WriteStr(1,5,'ESI '+HexStr(rs.esi,8),7);
-            WriteStr(1,6,'EDI '+HexStr(rs.edi,8),7);
-            WriteStr(1,7,'ESP '+HexStr(rs.esp,8),7);
-            WriteStr(1,8,'EBP '+HexStr(rs.ebp,8),7);
-            WriteStr(14,0,'CS '+HexStr(rs.cs,4),7);
-            WriteStr(14,1,'DS '+HexStr(rs.ds,4),7);
-            WriteStr(14,2,'ES '+HexStr(rs.es,4),7);
-            WriteStr(14,3,'FS '+HexStr(rs.fs,4),7);
-            WriteStr(14,4,'GS '+HexStr(rs.gs,4),7);
-            WriteStr(14,5,'SS '+HexStr(rs.ss,4),7);
-            WriteStr(22,0,'c='+chr(byte((rs.eflags and $1)<>0)+48),7);
-            WriteStr(22,1,'z='+chr(byte((rs.eflags and $20)<>0)+48),7);
-            WriteStr(22,2,'s='+chr(byte((rs.eflags and $80)<>0)+48),7);
-            WriteStr(22,3,'o='+chr(byte((rs.eflags and $800)<>0)+48),7);
-            WriteStr(22,4,'p='+chr(byte((rs.eflags and $4)<>0)+48),7);
-            WriteStr(22,5,'i='+chr(byte((rs.eflags and $200)<>0)+48),7);
-            WriteStr(22,6,'a='+chr(byte((rs.eflags and $10)<>0)+48),7);
-            WriteStr(22,7,'d='+chr(byte((rs.eflags and $400)<>0)+48),7);
+            SetColor(rs.eax,OldReg.eax);
+            WriteStr(1,0,'EAX '+HexStr(rs.eax,8),color);
+            SetColor(rs.ebx,OldReg.ebx);
+            WriteStr(1,1,'EBX '+HexStr(rs.ebx,8),color);
+            SetColor(rs.ecx,OldReg.ecx);
+            WriteStr(1,2,'ECX '+HexStr(rs.ecx,8),color);
+            SetColor(rs.edx,OldReg.edx);
+            WriteStr(1,3,'EDX '+HexStr(rs.edx,8),color);
+            SetColor(rs.eip,OldReg.eip);
+            WriteStr(1,4,'EIP '+HexStr(rs.eip,8),color);
+            SetColor(rs.esi,OldReg.esi);
+            WriteStr(1,5,'ESI '+HexStr(rs.esi,8),color);
+            SetColor(rs.edi,OldReg.edi);
+            WriteStr(1,6,'EDI '+HexStr(rs.edi,8),color);
+            SetColor(rs.esp,OldReg.esp);
+            WriteStr(1,7,'ESP '+HexStr(rs.esp,8),color);
+            SetColor(rs.ebp,OldReg.ebp);
+            WriteStr(1,8,'EBP '+HexStr(rs.ebp,8),color);
+            SetColor(rs.cs,OldReg.cs);
+            WriteStr(14,0,'CS '+HexStr(rs.cs,4),color);
+            SetColor(rs.ds,OldReg.ds);
+            WriteStr(14,1,'DS '+HexStr(rs.ds,4),color);
+            SetColor(rs.es,OldReg.es);
+            WriteStr(14,2,'ES '+HexStr(rs.es,4),color);
+            SetColor(rs.fs,OldReg.fs);
+            WriteStr(14,3,'FS '+HexStr(rs.fs,4),color);
+            SetColor(rs.gs,OldReg.gs);
+            WriteStr(14,4,'GS '+HexStr(rs.gs,4),color);
+            SetColor(rs.ss,OldReg.ss);
+            WriteStr(14,5,'SS '+HexStr(rs.ss,4),color);
+            SetColor(rs.eflags and $1,OldReg.eflags and $1);
+            WriteStr(22,0,'c='+chr(byte((rs.eflags and $1)<>0)+48),color);
+            SetColor(rs.eflags and $20,OldReg.eflags and $20);
+            WriteStr(22,1,'z='+chr(byte((rs.eflags and $20)<>0)+48),color);
+            SetColor(rs.eflags and $80,OldReg.eflags and $80);
+            WriteStr(22,2,'s='+chr(byte((rs.eflags and $80)<>0)+48),color);
+            SetColor(rs.eflags and $800,OldReg.eflags and $800);
+            WriteStr(22,3,'o='+chr(byte((rs.eflags and $800)<>0)+48),color);
+            SetColor(rs.eflags and $4,OldReg.eflags and $4);
+            WriteStr(22,4,'p='+chr(byte((rs.eflags and $4)<>0)+48),color);
+            SetColor(rs.eflags and $200,OldReg.eflags and $200);
+            WriteStr(22,5,'i='+chr(byte((rs.eflags and $200)<>0)+48),color);
+            SetColor(rs.eflags and $10,OldReg.eflags and $10);
+            WriteStr(22,6,'a='+chr(byte((rs.eflags and $10)<>0)+48),color);
+            SetColor(rs.eflags and $400,OldReg.eflags and $400);
+            WriteStr(22,7,'d='+chr(byte((rs.eflags and $400)<>0)+48),color);
+            OldReg:=rs;
          end
          end
        else
        else
          WriteStr(0,0,'<debugger error>',7);
          WriteStr(0,0,'<debugger error>',7);
@@ -2397,7 +2431,7 @@ end;
   procedure TRegistersWindow.Update;
   procedure TRegistersWindow.Update;
 
 
     begin
     begin
-       DrawView;
+       ReDraw;
     end;
     end;
 
 
   destructor TRegistersWindow.Done;
   destructor TRegistersWindow.Done;
@@ -2689,7 +2723,11 @@ end.
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.41  2000-01-10 16:20:50  florian
+  Revision 1.42  2000-01-10 17:49:40  pierre
+   * Get RegisterView to Update correctly
+   * Write in white changed regs (keeping a copy of previous values)
+
+  Revision 1.41  2000/01/10 16:20:50  florian
     * working register window
     * working register window
 
 
   Revision 1.40  2000/01/10 13:20:57  pierre
   Revision 1.40  2000/01/10 13:20:57  pierre