diff --git a/src/ce_gdb.lfm b/src/ce_gdb.lfm index d8f4998d..c51ac248 100644 --- a/src/ce_gdb.lfm +++ b/src/ce_gdb.lfm @@ -3,7 +3,6 @@ inherited CEGdbWidget: TCEGdbWidget Height = 668 Top = 333 Width = 517 - ActiveControl = Splitter2 Caption = 'GDB commander' ClientHeight = 668 ClientWidth = 517 @@ -38,7 +37,7 @@ inherited CEGdbWidget: TCEGdbWidget ClientHeight = 149 ClientWidth = 513 TabOrder = 0 - object cpuVIewer: TTIPropertyGrid + object cpuViewer: TTIPropertyGrid Left = 0 Height = 149 Hint = 'cpu registers' @@ -78,7 +77,7 @@ inherited CEGdbWidget: TCEGdbWidget Caption = 'Variables' ClientHeight = 164 ClientWidth = 509 - object varList: TListView + object lstVariables: TListView Left = 2 Height = 138 Top = 24 @@ -124,7 +123,7 @@ inherited CEGdbWidget: TCEGdbWidget Caption = 'Assembly' ClientHeight = 164 ClientWidth = 509 - object asmList: TListView + object lstAsm: TListView Left = 2 Height = 160 Top = 2 diff --git a/src/ce_gdb.pas b/src/ce_gdb.pas index 18644c98..e3f4ed33 100644 --- a/src/ce_gdb.pas +++ b/src/ce_gdb.pas @@ -344,7 +344,7 @@ type TabSheet2: TTabSheet; TabSheet3: TTabSheet; TabSheet4: TTabSheet; - varList: TListView; + lstVariables: TListView; lstCallStack: TListView; mnuReadW: TMenuItem; mnuWriteW: TMenuItem; @@ -354,13 +354,13 @@ type Panel1: TPanel; Panel3: TPanel; btnSendCom: TSpeedButton; - cpuVIewer: TTIPropertyGrid; + cpuViewer: TTIPropertyGrid; mnuProjRunnable: TPopupMenu; mnuWatch: TPopupMenu; Splitter2: TSplitter; Splitter3: TSplitter; Splitter4: TSplitter; - asmList: TListView; + lstAsm: TListView; varListFlt: TListViewFilterEdit; procedure btnContClick(Sender: TObject); procedure btnVariablesClick(Sender: TObject); @@ -414,6 +414,7 @@ type fLastFunction: string; fLastOffset: string; fLastLine: string; + procedure clearDisplays; procedure updateMenu; procedure optionsChangesApplied(sender: TObject); procedure disableEditor; @@ -966,7 +967,6 @@ begin fMsg:= getMessageDisplay; fLog := TStringList.Create; fInspState := TInspectableCPU.Create(@setGpr, @setSsr, @setFlag, @setFpr); - cpuVIewer.TIObject := fInspState; fJson := TJsonObject.Create; fStackItems := TStackItems.create; fSubj:= TCEDebugObserverSubject.Create; @@ -1130,6 +1130,16 @@ begin bmp.Free; end; +procedure TCEGdbWidget.clearDisplays; +begin + lstVariables.Clear; + lstCallStack.Clear; + lstThreads.Clear; + lstAsm.Clear; + cpuViewer.Clear; + cpuViewer.TIObject := nil; +end; + procedure TCEGdbWidget.optionsChangesApplied(sender: TObject); begin updateMenu; @@ -1304,7 +1314,7 @@ begin btnReg.Enabled:=false; btnVariables.Enabled:=false; btnStack.Enabled:=false; - varList.Clear; + clearDisplays; end; gsPaused: begin @@ -1364,18 +1374,18 @@ var begin if varListFlt.Filter = '' then exit; - for i:= 0 to varList.Items.Count-1 do - if AnsiContainsText(varList.Items[i].Caption, varListFlt.Filter) then + for i:= 0 to lstVariables.Items.Count-1 do + if AnsiContainsText(lstVariables.Items[i].Caption, varListFlt.Filter) then begin - varList.ItemIndex:=i; - varList.Selected.MakeVisible(false); + lstVariables.ItemIndex:=i; + lstVariables.Selected.MakeVisible(false); break; end; end; procedure TCEGdbWidget.disableEditor; begin - cpuVIewer.ItemIndex:=-1; + cpuViewer.ItemIndex:=-1; end; procedure TCEGdbWidget.startDebugging; @@ -1385,7 +1395,7 @@ var i: integer; b: TPersistentBreakPoint; begin - varList.Clear; + clearDisplays; if not fDbgRunnable and (fProj = nil) then begin dlgOkInfo('No project to debug', 'GDB commander'); @@ -1452,7 +1462,6 @@ begin bpkBreak: str := 'break ' + b.filename + ':' + intToStr(b.line) + #10; bpkWatch: {TODO-cGDB: put watchpoint from persistent}; end; - fGdb.Input.Write(str[1], str.length); end; // break on druntime exceptions + any throw' @@ -1477,6 +1486,8 @@ begin gdbCommand('-gdb-set mi-async on'); fGdb.OnReadData := @gdboutJsonize; // launch + cpuViewer.TIObject := fInspState; + cpuViewer.RefreshPropertyValues; gdbCommand('run >' + fOutputName + '< ' + fInputName); setState(gsRunning); end; @@ -1694,7 +1705,7 @@ procedure TCEGdbWidget.interpretJson; var itm: TListItem; begin - itm := asmList.FindCaption(0, fLastOffset, false, true, false); + itm := lstAsm.FindCaption(0, fLastOffset, false, true, false); if itm.isNotNil then begin itm.Selected:=true; @@ -1761,10 +1772,10 @@ begin val := obj.Find('exp'); if val.isNotNil then begin - k := varList.FindCaption(0, val.AsString, false, true, false); + k := lstVariables.FindCaption(0, val.AsString, false, true, false); if k.isNotNil then begin - varList.ItemIndex:=k.index; + lstVariables.ItemIndex:=k.index; k.MakeVisible(false); end; end; @@ -1938,7 +1949,7 @@ begin // TODO-cGDB: get SSE registers end; end; - cpuVIewer.RefreshPropertyValues; + cpuViewer.RefreshPropertyValues; end; val := fJson.Find('stack'); @@ -1979,9 +1990,9 @@ begin val := fJson.Find('locals'); if val.isNotNil and (val.JSONType = jtArray) then begin - j := varList.ItemIndex; - varList.BeginUpdate; - varList.Clear; + j := lstVariables.ItemIndex; + lstVariables.BeginUpdate; + lstVariables.Clear; arr := TJSONArray(val); for i := 0 to arr.Count-1 do begin @@ -1996,20 +2007,20 @@ begin val := obj.Find('value'); if val.isNil then continue; - varList.AddItem(nme, nil); - with varList.Items[varList.Items.Count-1] do + lstVariables.AddItem(nme, nil); + with lstVariables.Items[lstVariables.Items.Count-1] do SubItems.Add(val.AsString); end; - if (j <> -1) and (j <= varList.Items.Count) then - varList.ItemIndex := j; - varList.EndUpdate; + if (j <> -1) and (j <= lstVariables.Items.Count) then + lstVariables.ItemIndex := j; + lstVariables.EndUpdate; end; val := fJson.Find('asm_insns'); if val.isNotNil and (val.JSONType = jtArray) then begin - asmList.BeginUpdate; - asmList.Clear; + lstAsm.BeginUpdate; + lstAsm.Clear; arr := TJSONArray(val); for i := 0 to arr.Count-1 do begin @@ -2022,18 +2033,18 @@ begin val := obj.Find('inst'); if val.isNotNil then begin - asmList.AddItem(nme, nil); + lstAsm.AddItem(nme, nil); if nme = fLastOffset then - asmList.Selected := asmList.Items[asmList.Items.Count-1]; + lstAsm.Selected := lstAsm.Items[lstAsm.Items.Count-1]; if fOptions.autoDemangle then - asmList.Items[asmList.Items.Count-1].SubItems.Add(demangle(val.AsString)) + lstAsm.Items[lstAsm.Items.Count-1].SubItems.Add(demangle(val.AsString)) else - asmList.Items[asmList.Items.Count-1].SubItems.Add(val.AsString); + lstAsm.Items[lstAsm.Items.Count-1].SubItems.Add(val.AsString); end; end; - if asmList.Selected.isNotNil then - asmList.Selected.MakeVisible(false); - asmList.EndUpdate; + if lstAsm.Selected.isNotNil then + lstAsm.Selected.MakeVisible(false); + lstAsm.EndUpdate; selectAsmInstr; end; @@ -2269,9 +2280,9 @@ const var nme: string; begin - if varList.ItemIndex = -1 then + if lstVariables.ItemIndex = -1 then exit; - nme := varList.Items[varList.ItemIndex].Caption; + nme := lstVariables.Items[lstVariables.ItemIndex].Caption; gdbCommand(cmd[fAddWatchPointKind] + nme); end;