Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
This commit correctly updates internal breakpoint list when
breakpoints are manipulated through MI. In that case, GDB does not
generate breakpoint events, so this commit adds command post-execute
hook that injects an artifical breakpoint event back onto an event
queue.
"
jv:libgdbs - GNU Debugger Interface Library
Copyright (C) 2015-now Jan Vrany
Copyright (C) 2021 LabWare
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
"
"{ Package: 'jv:libgdbs' }"
"{ NameSpace: Smalltalk }"
GDBMICommand subclass:#GDBMI_break_enable
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
category:'GDB-Core-Commands-MI'
!
!GDBMI_break_enable class methodsFor:'documentation'!
copyright
"
jv:libgdbs - GNU Debugger Interface Library
Copyright (C) 2015-now Jan Vrany
Copyright (C) 2021 LabWare
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
"
!
documentation
"
The `-break-enable' Command
---------------------------
Synopsis
........
-break-enable ( BREAKPOINT )+
Enable (previously disabled) BREAKPOINT(s).
{No value for `GDBN'} Command
.............................
The corresponding {No value for `GDBN'} command is `enable'.
Example
.......
(gdb)
-break-enable 2
^done
(gdb)
-break-list
^done,BreakpointTable={nr_rows='1',nr_cols='6',
hdr=[{width='3',alignment='-1',col_name='number',colhdr='Num'},
{width='14',alignment='-1',col_name='type',colhdr='Type'},
{width='4',alignment='-1',col_name='disp',colhdr='Disp'},
{width='3',alignment='-1',col_name='enabled',colhdr='Enb'},
{width='10',alignment='-1',col_name='addr',colhdr='Address'},
{width='40',alignment='2',col_name='what',colhdr='What'}],
body=[bkpt={number='2',type='breakpoint',disp='keep',enabled='y',
addr='0x000100d0',func='main',file='hello.c',fullname='/home/foo/hello.c',
line='5',thread-groups=['i1'],times='0'}]}
(gdb)
"
! !
!GDBMI_break_enable methodsFor:'accessing'!
operation
^ 'break-enable'
! !
!GDBMI_break_enable methodsFor:'accessing-descriptors'!
resultDescription
^ (super resultDescription)
define:#bkpt as:GDBBreakpoint;
yourself
"Created: / 22-05-2021 / 15:28:49 / Jan Vrany <jan.vrany@labware.com>"
! !
!GDBMI_break_enable methodsFor:'hooks'!
postExecuteIn: debugger result: result
result isDone ifTrue: [
| breakpoints event |
breakpoints := arguments collect: [ :id | debugger breakpointForId: id ].
breakpoints do: [:bkpt | bkpt _enabled: true ].
event := GDBBreakpointModifiedEvent new.
event _bkpt: breakpoints.
debugger push: event.
].
"Created: / 22-05-2021 / 15:31:20 / Jan Vrany <jan.vrany@labware.com>"
"Modified: / 22-05-2021 / 16:36:29 / Jan Vrany <jan.vrany@labware.com>"
! !
!GDBMI_break_enable class methodsFor:'documentation'!
version_HG
^ '$Changeset: <not expanded> $'
! !