From ede95a3cc61640b52088484f558c801b32a765bd Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Mon, 20 Nov 2017 01:27:07 +0100 Subject: [PATCH] related to #199 --- icons/other/debugger_inspect.png | Bin 0 -> 823 bytes lazproj/coedit.lpi | 3 +- src/ce_gdb.lfm | 91 +++++++++++++++++++++---------- src/ce_gdb.pas | 54 ++++++++++++++++++ 4 files changed, 117 insertions(+), 31 deletions(-) create mode 100644 icons/other/debugger_inspect.png diff --git a/icons/other/debugger_inspect.png b/icons/other/debugger_inspect.png new file mode 100644 index 0000000000000000000000000000000000000000..347b0b7c62afd14cd15eb76cc48748507727508e GIT binary patch literal 823 zcmV-71IYY|P))u;OOAF{CNeK%MsWkqV!zC_aUCp~aWa{7JMCpQSp_bP;$JH` zPN7sPF^4%o1i-%24nF6%%6vt>83Z`aU*r$N27CjX;srr4SNNJ{Kdde6Usw`UYIPci zF@~g=1X-4W%{z@&P>Cu%B%q0`kr|YRTDJhADC)n;FsAFYnSaOTCiWKPm@vn4fDnTC zY8*5=4a_gELPmOqlB|$r`GFkzqy_o~>$149$_{(7jcG|yLXs$hED@lTRBpsq7!1QY z=(n}7m{^p5d(@rt@B6=p5D9!!{Y-CkN^>;NrD8Zhv?h_Osoon!Qimk?44~luD^U5 z9ZdX5>l=C-C7sI;ZZ&FPB}=bHNTDYup;J5$B>D^oKH6Id3^? zksJ*UQrJ>R0=EOiR&A3WKkg$|zcuDO;Pl*WwrmGLDf|q6XrbA@>xW(Mg1tdGa6dp; zn(9n*#@)tek;n+~28%~ZN=kg&0Y~8XROW#Wf^aLVHS3@9U&|$y?98dSvVsD8_t@AJ zsjqLm<@fumwg6NZcF?0UZmKPw zTC)kTP!~|UsM%r(wSO}YP{<{ni{t`#;YbX~iPPo*MuF002ovPDHLkV1i08 BbqW9g literal 0 HcmV?d00001 diff --git a/lazproj/coedit.lpi b/lazproj/coedit.lpi index 991585cc..abc90c0e 100644 --- a/lazproj/coedit.lpi +++ b/lazproj/coedit.lpi @@ -13,7 +13,7 @@ - + @@ -118,6 +118,7 @@ + diff --git a/src/ce_gdb.lfm b/src/ce_gdb.lfm index 8e4e6aa7..efe89cb6 100644 --- a/src/ce_gdb.lfm +++ b/src/ce_gdb.lfm @@ -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 diff --git a/src/ce_gdb.pas b/src/ce_gdb.pas index 5568b3dc..cddff4ce 100644 --- a/src/ce_gdb.pas +++ b/src/ce_gdb.pas @@ -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;