This commit is contained in:
Basile Burg 2017-11-20 01:27:07 +01:00
parent 632d89f537
commit ede95a3cc6
4 changed files with 117 additions and 31 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 823 B

View File

@ -13,7 +13,7 @@
<DpiAware Value="True/PM"/>
</XPManifest>
<Icon Value="0"/>
<Resources Count="104">
<Resources Count="105">
<Resource_0 FileName="../icons/window/layout_add.png" Type="RCDATA" ResourceName="LAYOUT_ADD"/>
<Resource_1 FileName="../icons/window/layout.png" Type="RCDATA" ResourceName="LAYOUT"/>
<Resource_2 FileName="../icons/window/application_go.png" Type="RCDATA" ResourceName="APPLICATION_GO"/>
@ -118,6 +118,7 @@
<Resource_101 FileName="../icons/other/warning.png" Type="RCDATA" ResourceName="WARNING"/>
<Resource_102 FileName="../icons/other/break_reached.png" Type="RCDATA" ResourceName="BREAK_REACHED"/>
<Resource_103 FileName="../icons/other/break_set.png" Type="RCDATA" ResourceName="BREAK_SET"/>
<Resource_104 FileName="../icons/other/debugger_inspect.png" Type="RCDATA" ResourceName="DEBUGGER_INSPECT"/>
</Resources>
</General>
<i18n>

View File

@ -34,15 +34,15 @@ inherited CEGdbWidget: TCEGdbWidget
Width = 517
Align = alClient
Caption = 'CPU'
ClientHeight = 161
ClientWidth = 515
ClientHeight = 160
ClientWidth = 513
TabOrder = 0
object cpuViewer: TTIPropertyGrid
Left = 0
Height = 161
Height = 160
Hint = 'cpu registers'
Top = 0
Width = 515
Width = 513
Align = alClient
CheckboxForBoolean = True
DefaultValueFont.Color = clWindowText
@ -75,13 +75,13 @@ inherited CEGdbWidget: TCEGdbWidget
OnChange = PageControl2Change
object TabSheet3: TTabSheet
Caption = 'Variables'
ClientHeight = 173
ClientWidth = 515
ClientHeight = 169
ClientWidth = 513
object lstVariables: TListView
Left = 2
Height = 139
Top = 32
Width = 511
Height = 138
Top = 29
Width = 509
Align = alClient
AutoWidthLastColumn = True
BorderSpacing.Around = 2
@ -89,11 +89,11 @@ inherited CEGdbWidget: TCEGdbWidget
item
AutoSize = True
Caption = 'name'
Width = 53
Width = 47
end
item
Caption = 'value'
Width = 456
Width = 460
end>
GridLines = True
HideSelection = False
@ -106,10 +106,10 @@ inherited CEGdbWidget: TCEGdbWidget
end
object varListFlt: TListViewFilterEdit
Left = 2
Height = 28
Height = 25
Hint = 'locate variables'
Top = 2
Width = 511
Width = 509
ButtonWidth = 24
NumGlyphs = 1
Align = alTop
@ -121,8 +121,8 @@ inherited CEGdbWidget: TCEGdbWidget
end
object TabSheet4: TTabSheet
Caption = 'Assembler'
ClientHeight = 173
ClientWidth = 515
ClientHeight = 169
ClientWidth = 513
object lstAsm: TListView
Left = 2
Height = 160
@ -136,7 +136,7 @@ inherited CEGdbWidget: TCEGdbWidget
item
AutoSize = True
Caption = 'address'
Width = 67
Width = 61
end
item
Caption = 'instruction'
@ -209,14 +209,14 @@ inherited CEGdbWidget: TCEGdbWidget
TabOrder = 3
object TabSheet1: TTabSheet
Caption = 'Call stack'
ClientHeight = 173
ClientWidth = 515
ClientHeight = 169
ClientWidth = 513
object lstCallStack: TListView
Left = 0
Height = 173
Height = 169
Hint = 'call stack'
Top = 0
Width = 515
Width = 513
Align = alClient
AutoSort = False
Columns = <
@ -246,8 +246,8 @@ inherited CEGdbWidget: TCEGdbWidget
end
object TabSheet2: TTabSheet
Caption = 'Thread list'
ClientHeight = 173
ClientWidth = 515
ClientHeight = 169
ClientWidth = 513
object lstThreads: TListView
Left = 0
Height = 164
@ -261,32 +261,32 @@ inherited CEGdbWidget: TCEGdbWidget
item
AutoSize = True
Caption = 'id'
Width = 28
Width = 22
end
item
AutoSize = True
Caption = 'state'
Width = 49
Width = 43
end
item
AutoSize = True
Caption = 'core'
Width = 44
Width = 38
end
item
AutoSize = True
Caption = 'function'
Width = 69
Width = 63
end
item
AutoSize = True
Caption = 'address'
Width = 67
Width = 61
end
item
AutoSize = True
Caption = 'filename'
Width = 73
Width = 67
end
item
Caption = 'line'
@ -302,8 +302,8 @@ inherited CEGdbWidget: TCEGdbWidget
end
object TabSheet5: TTabSheet
Caption = 'Debugee options'
ClientHeight = 173
ClientWidth = 515
ClientHeight = 169
ClientWidth = 513
object dbgeeOptsEd: TTIPropertyGrid
Left = 2
Height = 160
@ -433,6 +433,17 @@ inherited CEGdbWidget: TCEGdbWidget
resourceName = 'CAMERA_ADD'
scaledSeparator = False
end
object btnEval: TCEToolButton[11]
Left = 345
Hint = 'evaluate either a variable from the list or a custom expression'
Top = 0
Caption = 'btnEval'
DropdownMenu = mnuEval
OnClick = btnEvalClick
Style = tbsDropDown
resourceName = 'DEBUGGER_INSPECT'
scaledSeparator = False
end
end
end
object Splitter2: TSplitter[1]
@ -499,4 +510,24 @@ inherited CEGdbWidget: TCEGdbWidget
Caption = 'machine instruction'
end
end
object mnuEval: TPopupMenu[7]
left = 216
top = 168
object mnuEvalSelected: TMenuItem
AutoCheck = True
Caption = 'Evaluate selected variable'
Checked = True
OnClick = mnuEvalSelectedClick
end
object mnuEvalDeref: TMenuItem
AutoCheck = True
Caption = 'Evaluate dereference of selected variable'
OnClick = mnuEvalDerefClick
end
object mnuEvalCustom: TMenuItem
AutoCheck = True
Caption = 'Evaluate custom expression'
OnClick = mnuEvalCustomClick
end
end
end

View File

@ -372,9 +372,12 @@ type
property projectByFile[const fname: string]: TCEDebugeeOption read getProjectByFile; default;
end;
TGdbEvalKind = (gekSelectedVar, gekDerefSelectedVar, gekCustom);
{ TCEGdbWidget }
TCEGdbWidget = class(TCEWidget, ICEProjectObserver, ICEDocumentObserver, ICEDebugger)
btnContinue: TCEToolButton;
btnEval: TCEToolButton;
btnVariables: TCEToolButton;
btnNext: TCEToolButton;
btnOver: TCEToolButton;
@ -388,12 +391,16 @@ type
Edit1: TComboBox;
GroupBox3: TGroupBox;
lstThreads: TListView;
mnuEvalDeref: TMenuItem;
mnuEvalSelected: TMenuItem;
mnuEvalCustom: TMenuItem;
mnuNextMachine: TMenuItem;
mnuStepMachine: TMenuItem;
mnuStep: TPopupMenu;
PageControl1: TPageControl;
PageControl2: TPageControl;
mnuNext: TPopupMenu;
mnuEval: TPopupMenu;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
@ -419,6 +426,7 @@ type
dbgeeOptsEd: TTIPropertyGrid;
varListFlt: TListViewFilterEdit;
procedure btnContClick(Sender: TObject);
procedure btnEvalClick(Sender: TObject);
procedure btnVariablesClick(Sender: TObject);
procedure btnNextClick(Sender: TObject);
procedure btnOverClick(Sender: TObject);
@ -434,6 +442,9 @@ type
procedure Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure lstCallStackDblClick(Sender: TObject);
procedure lstThreadsDblClick(Sender: TObject);
procedure mnuEvalDerefClick(Sender: TObject);
procedure mnuEvalCustomClick(Sender: TObject);
procedure mnuEvalSelectedClick(Sender: TObject);
procedure mnuReadWClick(Sender: TObject);
procedure mnuReadWriteWClick(Sender: TObject);
procedure mnuSelProjClick(Sender: TObject);
@ -444,6 +455,7 @@ type
protected
procedure setToolBarFlat(value: boolean); override;
private
fEvalKind: TGdbEvalKind;
fSynchronizedDocuments: TStringList;
fSynchronizingBreakpoints: boolean;
fSyms: ICESymStringExpander;
@ -2525,6 +2537,27 @@ begin
continueDebugging;
end;
procedure TCEGdbWidget.btnEvalClick(Sender: TObject);
var
e: string = '';
begin
if fGdb.isNil or not fGdb.Running then
exit;
case fEvalKind of
gekCustom:
if not InputQuery('Evaluate', 'Expression', e) then
e := '';
gekSelectedVar:
if lstVariables.ItemIndex <> -1 then
e := lstVariables.Items[lstVariables.ItemIndex].Caption;
gekDerefSelectedVar:
if lstVariables.ItemIndex <> -1 then
e := '*' + lstVariables.Items[lstVariables.ItemIndex].Caption;
end;
if not e.isBlank then
gdbCommand('-data-evaluate-expression "' + e + '"');
end;
procedure TCEGdbWidget.btnVariablesClick(Sender: TObject);
begin
infoVariables;
@ -2646,6 +2679,27 @@ begin
doc.CaretY:= lne;
end;
procedure TCEGdbWidget.mnuEvalDerefClick(Sender: TObject);
begin
fEvalKind := gekDerefSelectedVar;
mnuEvalSelected.Checked:=false;
mnuEvalCustom.Checked:=false;
end;
procedure TCEGdbWidget.mnuEvalCustomClick(Sender: TObject);
begin
fEvalKind := gekCustom;
mnuEvalSelected.Checked:=false;
mnuEvalDeref.Checked:=false;
end;
procedure TCEGdbWidget.mnuEvalSelectedClick(Sender: TObject);
begin
fEvalKind := gekSelectedVar;
mnuEvalCustom.Checked:=false;
mnuEvalDeref.Checked:=false;
end;
procedure TCEGdbWidget.mnuReadWClick(Sender: TObject);
begin
fAddWatchPointKind := wpkRead;