diff --git a/ide/debugmanager.pas b/ide/debugmanager.pas index 3c8954fcc6..c56d9963ca 100644 --- a/ide/debugmanager.pas +++ b/ide/debugmanager.pas @@ -76,6 +76,7 @@ type procedure mnuAddBpAddress(Sender: TObject); procedure mnuAddBpSource(Sender: TObject); procedure mnuAddBpData(Sender: TObject); + procedure mnuAddBpDataAtCursor(Sender: TObject); // Debugger events procedure DebuggerBreakPointHit(ADebugger: TDebugger; ABreakPoint: TBaseBreakPoint; var ACanContinue: Boolean); @@ -721,10 +722,43 @@ var NewBreakpoint: TIDEBreakPoint; begin NewBreakpoint := BreakPoints.Add('', wpsGlobal, wpkWrite); - if ShowBreakPointProperties(NewBreakpoint) <> mrOk then + if ShowBreakPointProperties(NewBreakpoint) = mrOk then + ViewDebugDialog(ddtBreakpoints, False) + else NewBreakpoint.Free; end; +procedure TDebugManager.mnuAddBpDataAtCursor(Sender: TObject); +var + SE: TSourceEditor; + WatchVar: String; + NewBreakpoint: TIDEBreakPoint; +begin + SE := SourceEditorManager.GetActiveSE; + + if Assigned(SE) then + begin + if SE.SelectionAvailable then + WatchVar := SE.Selection + else + WatchVar := SE.GetOperandAtCurrentCaret; + + if (WatchVar <> '') and SE.EditorComponent.Focused then + begin + // TODO: find existing? + NewBreakpoint := BreakPoints.Add(WatchVar, wpsGlobal, wpkWrite); + if ShowBreakPointProperties(NewBreakpoint) = mrOk then + ViewDebugDialog(ddtBreakpoints, False) + else + NewBreakpoint.Free; + exit; + end; + end; + + // watch was not added automatically => show a dialog + mnuAddBpData(nil); +end; + procedure TDebugManager.BreakAutoContinueTimer(Sender: TObject); begin FAutoContinueTimer.Enabled := False; @@ -808,7 +842,7 @@ begin end; // watch was not added automatically => show a dialog - ShowWatchProperties(nil, WatchVar); + ShowWatchProperties(nil, ''); end; //----------------------------------------------------------------------------- @@ -1625,6 +1659,7 @@ end; procedure TDebugManager.ConnectSourceNotebookEvents; begin SrcEditMenuAddWatchAtCursor.OnClick:=@mnuAddWatchClicked; + SrcEditMenuAddWatchPointAtCursor.OnClick:=@mnuAddBpDataAtCursor; SrcEditMenuEvaluateModify.OnClick:=@mnuViewDebugDialogClick; SrcEditMenuEvaluateModify.Tag := Ord(ddtEvaluate); SrcEditMenuInspect.OnClick:=@mnuViewDebugDialogClick; @@ -1675,6 +1710,7 @@ begin SrcEditMenuRunToCursor.Command:=GetCommand(ecRunToCursor); SrcEditMenuEvaluateModify.Command:=GetCommand(ecEvaluate); SrcEditMenuAddWatchAtCursor.Command:=GetCommand(ecAddWatch); + SrcEditMenuAddWatchPointAtCursor.Command:=GetCommand(ecAddBpDataWatch); SrcEditMenuInspect.Command:=GetCommand(ecInspect); SrcEditMenuViewCallStack.Command:=GetCommand(ecToggleCallStack); end; diff --git a/ide/keymapping.pp b/ide/keymapping.pp index 2dc380f5a0..42af166bf3 100644 --- a/ide/keymapping.pp +++ b/ide/keymapping.pp @@ -579,7 +579,7 @@ begin ecAddWatch: SetResult(VK_F5,[ssCtrl],VK_UNKNOWN,[]); ecAddBpSource: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]); ecAddBpAddress: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]); - ecAddBpDataWatch: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]); + ecAddBpDataWatch: SetResult(VK_F5,[ssShift],VK_UNKNOWN,[]); // components menu ecNewPackage: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]); @@ -1835,7 +1835,7 @@ begin ecAddWatch: SetResult(VK_F5,[ssCtrl],VK_F5,[ssCtrl,ssMeta]); ecAddBpSource: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]); ecAddBpAddress: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]); - ecAddBpDataWatch: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]); + ecAddBpDataWatch: SetResult(VK_F5,[ssShift],VK_UNKNOWN,[]); end; end; diff --git a/ide/lazarusidestrconsts.pas b/ide/lazarusidestrconsts.pas index ce62c8ed19..57a76dd6c4 100644 --- a/ide/lazarusidestrconsts.pas +++ b/ide/lazarusidestrconsts.pas @@ -2279,6 +2279,7 @@ resourcestring uemToggleBreakpoint = 'Toggle &Breakpoint'; uemEvaluateModify = '&Evaluate/Modify ...'; uemAddWatchAtCursor = 'Add &Watch At Cursor'; + uemAddWatchPointAtCursor = 'Add Watch&Point At Cursor'; uemInspect = '&Inspect ...'; uemRunToCursor='&Run to Cursor'; uemViewCallStack = 'View Call Stack'; diff --git a/ide/sourceeditor.pp b/ide/sourceeditor.pp index bba0a7ffff..8013523dde 100644 --- a/ide/sourceeditor.pp +++ b/ide/sourceeditor.pp @@ -1169,6 +1169,7 @@ var SrcEditMenuRunToCursor: TIDEMenuCommand; SrcEditMenuEvaluateModify: TIDEMenuCommand; SrcEditMenuAddWatchAtCursor: TIDEMenuCommand; + SrcEditMenuAddWatchPointAtCursor: TIDEMenuCommand; SrcEditMenuInspect: TIDEMenuCommand; SrcEditMenuViewCallStack: TIDEMenuCommand; // source @@ -1435,6 +1436,8 @@ begin SrcEditMenuEvaluateModify.Enabled:=False; SrcEditMenuAddWatchAtCursor:=RegisterIDEMenuCommand (AParent, 'Add Watch at Cursor',uemAddWatchAtCursor); + SrcEditMenuAddWatchPointAtCursor:=RegisterIDEMenuCommand + (AParent, 'Add Watch at Cursor',uemAddWatchPointAtCursor); SrcEditMenuInspect:=RegisterIDEMenuCommand (AParent, 'Inspect...', uemInspect, nil, nil, nil, 'debugger_inspect'); SrcEditMenuInspect.Enabled:=False;