Update (internal) list of breakpoints when creating / modifying / deleting using MI commands
authorJan Vrany <jan.vrany@labware.com>
Mon, 28 Jun 2021 12:43:27 +0100
changeset 231 dcadeaddd0c8
parent 230 ba4b57758e92
child 232 eb382c43abd9
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.
GDBBreakpoint.st
GDBBreakpointDeletedEvent.st
GDBDebugger.st
GDBEvent.st
GDBEventSetProcessingFinished.st
GDBEventSetProcessingStarted.st
GDBMI_break_after.st
GDBMI_break_commands.st
GDBMI_break_condition.st
GDBMI_break_delete.st
GDBMI_break_disable.st
GDBMI_break_enable.st
GDBMI_break_insert.st
GDBMI_break_passcount.st
GDBMI_trace_save.st
GDBThreadStateTerminated.st
tests/GDBDebuggerTestsR.st
--- a/GDBBreakpoint.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBBreakpoint.st	Mon Jun 28 12:43:27 2021 +0100
@@ -1,6 +1,7 @@
 "
 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
@@ -34,6 +35,7 @@
 "
 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
@@ -86,10 +88,10 @@
     self assert: debugger notNil.
     condition ~= aString ifTrue:[ 
         debugger send: (GDBMI_break_condition arguments: (Array with: number with: aString)) andWait: true.    
-        condition := aString
     ].
 
     "Modified: / 17-11-2017 / 20:25:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 22-05-2021 / 16:38:06 / Jan Vrany <jan.vrany@labware.com>"
 !
 
 disp
@@ -108,11 +110,11 @@
         ] ifFalse:[ 
             debugger send: (GDBMI_break_disable arguments: (Array with: number)) andWait: true.
         ].
-        enabled := aBoolean.
     ].
 
     "Created: / 07-07-2017 / 12:33:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 17-11-2017 / 20:24:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 22-05-2021 / 16:16:35 / Jan Vrany <jan.vrany@labware.com>"
 !
 
 file
@@ -161,11 +163,11 @@
     self assert: debugger notNil.
     script ~= aString ifTrue:[ 
         debugger send: (GDBMI_break_commands arguments: (Array with: number) , aString asStringCollection) andWait: true.    
-        script := aString
     ].
 
     "Created: / 11-07-2017 / 14:32:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 17-11-2017 / 20:24:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 22-05-2021 / 16:38:18 / Jan Vrany <jan.vrany@labware.com>"
 !
 
 times
--- a/GDBBreakpointDeletedEvent.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBBreakpointDeletedEvent.st	Mon Jun 28 12:43:27 2021 +0100
@@ -1,6 +1,7 @@
 "
 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
@@ -33,6 +34,7 @@
 "
 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
@@ -67,6 +69,10 @@
     ^ id
 !
 
+id:anInteger
+    id := anInteger.
+!
+
 type
 	^  'breakpoint-deleted'
 ! !
--- a/GDBDebugger.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBDebugger.st	Mon Jun 28 12:43:27 2021 +0100
@@ -940,35 +940,37 @@
         | old |    
 
         old := self breakpointForId: new number ifAbsent:[ nil ].
-        old notNil ifTrue:[
-            old updateFrom: new.
-        ] ifFalse:[ 
-            "/ Care for breakpoints with multiple locations. 
-            "/ 
-            "/.If the breakpoint has been created as pending breakpoint
-            "/ it is unknown whether it is a multi-location breakpoint or not
-            "/ so it has no locations.
-            "/ 
-            "/ If, once the object is loaded abd breakpoint can be installed,
-            "/ it turns out there are multiple locations, we get an an
-            "/ =breakpoint-modified event listing all locations.
-            "/ 
-            "/ Therefore, we have to update existing breakpoint and add 
-            "/ locations.
+        old ~~ new ifTrue:[
+            old notNil ifTrue:[
+                old updateFrom: new.
+            ] ifFalse:[ 
+                "/ Care for breakpoints with multiple locations. 
+                "/ 
+                "/.If the breakpoint has been created as pending breakpoint
+                "/ it is unknown whether it is a multi-location breakpoint or not
+                "/ so it has no locations.
+                "/ 
+                "/ If, once the object is loaded abd breakpoint can be installed,
+                "/ it turns out there are multiple locations, we get an an
+                "/ =breakpoint-modified event listing all locations.
+                "/ 
+                "/ Therefore, we have to update existing breakpoint and add 
+                "/ locations.
 
-            | dot |
+                | dot |
 
-            "/ First, check if it is a 'location':
-            dot := new number indexOf: $..
-            dot ~~ 0 ifTrue:[ 
-                | bpt |    
+                "/ First, check if it is a 'location':
+                dot := new number indexOf: $..
+                dot ~~ 0 ifTrue:[ 
+                    | bpt |    
 
-                bpt := self breakpointForId: (new number copyTo: dot - 1).
-                "/ See GDBBreakpoint >> locations...
-                (bpt locations includes: bpt) ifTrue:[ 
-                    bpt locations: (Array with: new)
-                ] ifFalse:[ 
-                    bpt locations: (bpt locations copyWith: new)
+                    bpt := self breakpointForId: (new number copyTo: dot - 1).
+                    "/ See GDBBreakpoint >> locations...
+                    (bpt locations includes: bpt) ifTrue:[ 
+                        bpt locations: (Array with: new)
+                    ] ifFalse:[ 
+                        bpt locations: (bpt locations copyWith: new)
+                    ].
                 ].
             ].
         ].
@@ -977,6 +979,7 @@
     "Created: / 06-07-2017 / 16:28:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 15-01-2018 / 23:11:52 / jv"
     "Modified: / 07-02-2019 / 15:14:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 22-05-2021 / 16:33:26 / Jan Vrany <jan.vrany@labware.com>"
 !
 
 onCmdParamChangedEvent: aGDBCmdParamChangedEvent
--- a/GDBEvent.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBEvent.st	Mon Jun 28 12:43:27 2021 +0100
@@ -126,6 +126,18 @@
     "Created: / 01-06-2014 / 23:37:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+isEventSetProcessingFinishedEvent
+    ^ false
+
+    "Created: / 22-05-2021 / 15:50:48 / Jan Vrany <jan.vrany@labware.com>"
+!
+
+isEventSetProcessingStartedEvent
+    ^ false
+
+    "Created: / 22-05-2021 / 15:50:38 / Jan Vrany <jan.vrany@labware.com>"
+!
+
 isExecutionEvent
     ^ false
 
--- a/GDBEventSetProcessingFinished.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBEventSetProcessingFinished.st	Mon Jun 28 12:43:27 2021 +0100
@@ -1,6 +1,7 @@
 "
 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
@@ -33,6 +34,7 @@
 "
 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
@@ -50,3 +52,11 @@
 "
 ! !
 
+!GDBEventSetProcessingFinished methodsFor:'testing'!
+
+isEventSetProcessingFinishedEvent
+    ^ true
+
+    "Created: / 22-05-2021 / 15:50:58 / Jan Vrany <jan.vrany@labware.com>"
+! !
+
--- a/GDBEventSetProcessingStarted.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBEventSetProcessingStarted.st	Mon Jun 28 12:43:27 2021 +0100
@@ -1,6 +1,7 @@
 "
 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
@@ -33,6 +34,7 @@
 "
 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
@@ -50,6 +52,14 @@
 "
 ! !
 
+!GDBEventSetProcessingStarted methodsFor:'testing'!
+
+isEventSetProcessingStartedEvent
+    ^ true
+
+    "Created: / 22-05-2021 / 15:51:05 / Jan Vrany <jan.vrany@labware.com>"
+! !
+
 !GDBEventSetProcessingStarted class methodsFor:'documentation'!
 
 version_HG
--- a/GDBMI_break_after.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBMI_break_after.st	Mon Jun 28 12:43:27 2021 +0100
@@ -1,6 +1,7 @@
 "
 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
@@ -33,6 +34,7 @@
 "
 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
@@ -107,3 +109,26 @@
 	^ 'break-after'
 ! !
 
+!GDBMI_break_after 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_after methodsFor:'hooks'!
+
+postExecuteIn: debugger result: result 
+    result isDone ifTrue: [ 
+        | event |
+        event := GDBBreakpointModifiedEvent new.
+        event _bkpt: (Array with: (result propertyAt: #bkpt)).
+        debugger push: event
+    ].
+
+    "Created: / 22-05-2021 / 15:31:20 / Jan Vrany <jan.vrany@labware.com>"
+! !
+
--- a/GDBMI_break_commands.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBMI_break_commands.st	Mon Jun 28 12:43:27 2021 +0100
@@ -1,6 +1,7 @@
 "
 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
@@ -33,6 +34,7 @@
 "
 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
@@ -96,6 +98,34 @@
 	^ 'break-commands'
 ! !
 
+!GDBMI_break_commands 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_commands methodsFor:'hooks'!
+
+postExecuteIn: debugger result: result 
+    result isDone ifTrue: [ 
+        | breakpoint event |
+
+        breakpoint := debugger breakpointForId: arguments first.
+        breakpoint _script: arguments allButFirst.
+
+        event := GDBBreakpointModifiedEvent new.
+        event _bkpt: (Array with: breakpoint).
+        debugger push: event
+    ].
+
+    "Created: / 22-05-2021 / 15:31:20 / Jan Vrany <jan.vrany@labware.com>"
+    "Modified: / 28-06-2021 / 12:28:18 / Jan Vrany <jan.vrany@labware.com>"
+! !
+
 !GDBMI_break_commands class methodsFor:'documentation'!
 
 version_HG
--- a/GDBMI_break_condition.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBMI_break_condition.st	Mon Jun 28 12:43:27 2021 +0100
@@ -1,6 +1,7 @@
 "
 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
@@ -33,6 +34,7 @@
 "
 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
@@ -99,3 +101,31 @@
 	^ 'break-condition'
 ! !
 
+!GDBMI_break_condition 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_condition methodsFor:'hooks'!
+
+postExecuteIn: debugger result: result 
+    result isDone ifTrue: [ 
+         | breakpoint event |
+
+        breakpoint := debugger breakpointForId: arguments first.
+        breakpoint _cond: arguments second.
+
+        event := GDBBreakpointModifiedEvent new.
+        event _bkpt: (Array with: breakpoint).
+        debugger push: event     
+    ].
+
+    "Created: / 22-05-2021 / 15:31:20 / Jan Vrany <jan.vrany@labware.com>"
+    "Modified: / 28-06-2021 / 12:29:12 / Jan Vrany <jan.vrany@labware.com>"
+! !
+
--- a/GDBMI_break_delete.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBMI_break_delete.st	Mon Jun 28 12:43:27 2021 +0100
@@ -1,6 +1,7 @@
 "
 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
@@ -33,6 +34,7 @@
 "
 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
@@ -96,6 +98,22 @@
 	^ 'break-delete'
 ! !
 
+!GDBMI_break_delete methodsFor:'hooks'!
+
+postExecuteIn: debugger result: result 
+    result isDone ifTrue: [ 
+        arguments do: [:bkptId | 
+            | event |
+
+            event := GDBBreakpointDeletedEvent new.
+            event id: bkptId.
+            debugger push: event
+        ].
+    ].
+
+    "Created: / 22-05-2021 / 15:28:08 / Jan Vrany <jan.vrany@labware.com>"
+! !
+
 !GDBMI_break_delete class methodsFor:'documentation'!
 
 version_HG
--- a/GDBMI_break_disable.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBMI_break_disable.st	Mon Jun 28 12:43:27 2021 +0100
@@ -1,6 +1,7 @@
 "
 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
@@ -33,6 +34,7 @@
 "
 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
@@ -98,6 +100,33 @@
 	^ 'break-disable'
 ! !
 
+!GDBMI_break_disable 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_disable methodsFor:'hooks'!
+
+postExecuteIn: debugger result: result 
+    result isDone ifTrue: [
+        | breakpoints event |
+
+        breakpoints := arguments collect: [ :id | debugger breakpointForId: id ].
+        breakpoints do: [:bkpt | bkpt _enabled: false ].
+        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:46 / Jan Vrany <jan.vrany@labware.com>"
+! !
+
 !GDBMI_break_disable class methodsFor:'documentation'!
 
 version_HG
--- a/GDBMI_break_enable.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBMI_break_enable.st	Mon Jun 28 12:43:27 2021 +0100
@@ -1,6 +1,7 @@
 "
 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
@@ -33,6 +34,7 @@
 "
 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
@@ -97,6 +99,33 @@
 	^ '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
--- a/GDBMI_break_insert.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBMI_break_insert.st	Mon Jun 28 12:43:27 2021 +0100
@@ -1,6 +1,7 @@
 "
 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
@@ -33,6 +34,7 @@
 "
 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
@@ -158,3 +160,26 @@
 	^ 'break-insert'
 ! !
 
+!GDBMI_break_insert 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_insert methodsFor:'hooks'!
+
+postExecuteIn: debugger result: result 
+    result isDone ifTrue: [ 
+        | event |
+        event := GDBBreakpointCreatedEvent new.
+        event _bkpt: (Array with: (result propertyAt: #bkpt)).
+        debugger push: event
+    ].
+
+    "Created: / 22-05-2021 / 15:31:20 / Jan Vrany <jan.vrany@labware.com>"
+! !
+
--- a/GDBMI_break_passcount.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBMI_break_passcount.st	Mon Jun 28 12:43:27 2021 +0100
@@ -1,6 +1,7 @@
 "
 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
@@ -33,6 +34,7 @@
 "
 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
@@ -74,3 +76,28 @@
 	^ 'break-passcount'
 ! !
 
+!GDBMI_break_passcount 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_passcount methodsFor:'hooks'!
+
+postExecuteIn: debugger result: result 
+    result isDone ifTrue: [ 
+        | event |
+        event := GDBBreakpointModifiedEvent new.
+        self assert: (result propertyAt: #bkpt) notNil.
+        event _bkpt: (Array with: (result propertyAt: #bkpt)).
+        debugger push: event
+    ].
+
+    "Created: / 22-05-2021 / 15:31:20 / Jan Vrany <jan.vrany@labware.com>"
+    "Modified: / 28-06-2021 / 12:35:05 / Jan Vrany <jan.vrany@labware.com>"
+! !
+
--- a/GDBMI_trace_save.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBMI_trace_save.st	Mon Jun 28 12:43:27 2021 +0100
@@ -1,6 +1,7 @@
 "
 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
@@ -33,6 +34,7 @@
 "
 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
@@ -56,3 +58,10 @@
 	^ 'trace-save'
 ! !
 
+!GDBMI_trace_save class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/GDBThreadStateTerminated.st	Sat May 22 16:52:20 2021 +0100
+++ b/GDBThreadStateTerminated.st	Mon Jun 28 12:43:27 2021 +0100
@@ -1,6 +1,7 @@
 "
 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
@@ -33,6 +34,7 @@
 "
 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
@@ -68,3 +70,10 @@
     "Created: / 07-09-2014 / 23:22:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!GDBThreadStateTerminated class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/tests/GDBDebuggerTestsR.st	Sat May 22 16:52:20 2021 +0100
+++ b/tests/GDBDebuggerTestsR.st	Mon Jun 28 12:43:27 2021 +0100
@@ -243,8 +243,15 @@
     self assert: debugger breakpoints size == 1.
     self assert: debugger breakpoints first func = 'factorial'.
 
+    debugger send: 'dis ', debugger breakpoints anElement number printString.
+    self assert: debugger breakpoints size == 1.
+    self assert: debugger breakpoints anElement enabled == false.
 
-    debugger send: 'dis ', debugger breakpoints anElement number printString.
+    debugger send: (GDBMI_break_enable arguments: { debugger breakpoints anElement number printString }).
+    self assert: debugger breakpoints size == 1.
+    self assert: debugger breakpoints anElement enabled == true.
+
+    debugger send: (GDBMI_break_disable arguments: { debugger breakpoints anElement number printString }).
     self assert: debugger breakpoints size == 1.
     self assert: debugger breakpoints anElement enabled == false.
 
@@ -254,6 +261,7 @@
 
     "Created: / 07-07-2017 / 12:27:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified (format): / 18-10-2018 / 10:55:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 22-05-2021 / 16:30:40 / Jan Vrany <jan.vrany@labware.com>"
 !
 
 test_breakpoints_01c
@@ -412,6 +420,49 @@
     "Modified: / 26-03-2019 / 11:09:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+test_breakpoints_06a
+    debugger executable: GDBDebuggeesResource current binaryFactorial1.
+    self assert: debugger breakpoints isEmpty.
+
+    debugger send: (GDBMI_break_insert arguments:{'factorial'}).
+    self assert: debugger breakpoints size == 1.
+
+    debugger send: 'r' andWaitFor: GDBStoppedEvent.
+    self assert: debugger breakpoints size == 1.
+    self assert: debugger breakpoints first hasMultipleLocations not.
+    self assert: debugger breakpoints first func = 'factorial'.
+
+
+    debugger send: (GDBMI_break_delete arguments:{'1'}).
+    self assert: debugger breakpoints isEmpty.
+
+    debugger send: 'c' andWaitFor: GDBThreadGroupExitedEvent.
+    self assert: debugger breakpoints isEmpty.
+
+    debugger send: 'quit' andWait: false.
+
+    "Created: / 21-05-2021 / 22:07:08 / Jan Vrany <jan.vrany@labware.com>"
+!
+
+test_breakpoints_06b
+    debugger executable: GDBDebuggeesResource current binaryBreakpoints1.
+    self assert: debugger breakpoints isEmpty.
+
+    debugger send: (GDBMI_break_insert arguments:{'add'}).
+    self assert: debugger breakpoints size == 1.
+    self assert: debugger breakpoints first hasMultipleLocations.
+    self assert: debugger breakpoints first locations size > 1.
+    self assert: debugger breakpoints first enabled.
+    self assert: debugger breakpoints first locations first enabled.                      
+
+    debugger send: (GDBMI_break_delete arguments:{'1'}).
+    self assert: debugger breakpoints isEmpty.
+
+    debugger send: 'quit' andWait: false.
+
+    "Created: / 22-05-2021 / 15:55:24 / Jan Vrany <jan.vrany@labware.com>"
+!
+
 test_commands
 
     self assert: (debugger hasCommand: GDBMI_info_gdb_mi_command ).