Initial support for thread groups, threads and breakpoints.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Sun, 07 Sep 2014 14:42:02 +0100
changeset 35 c17ecf90e446
parent 34 4662b462b28e
child 36 095c4b0b74d3
Initial support for thread groups, threads and breakpoints.
GDBBreakpoint.st
GDBBreakpointCreatedEvent.st
GDBBreakpointDeletedEvent.st
GDBBreakpointEvent.st
GDBBreakpointModifiedEvent.st
GDBDebugger.st
GDBNotificationEvent.st
GDBObject.st
GDBSimulatorProcess.st
GDBThread.st
GDBThreadCreatedEvent.st
GDBThreadEvent.st
GDBThreadExitedEvent.st
GDBThreadGroup.st
GDBThreadGroupAddedEvent.st
GDBThreadGroupEvent.st
GDBThreadGroupExitedEvent.st
GDBThreadGroupStartedEvent.st
Make.proto
Make.spec
abbrev.stc
bc.mak
jv_libgdbs.st
libInit.cc
libgdbs.rc
tests/GDBDebuggerTests.st
tests/GDBParserTests.st
tests/tests.rc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBBreakpoint.st	Sun Sep 07 14:42:02 2014 +0100
@@ -0,0 +1,70 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBObject subclass:#GDBBreakpoint
+	instanceVariableNames:'number type disp enabled addr func file fullname line times'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core'
+!
+
+!GDBBreakpoint class methodsFor:'accessing - GDB value descriptors'!
+
+gdbValueDescriptor
+    ^ super gdbValueDescriptor
+        define: #number as: Integer;
+        define: #type as: String;
+        define: #disp as: String;
+        define: #enabled as: Boolean;
+        define: #addr as: Integer;
+        define: #func as: String;
+        define: #file as: String;
+        define: #fullname as: String;
+        define: #line as: Integer;
+        define: #times as: Integer;
+        yourself
+
+    "Created: / 06-09-2014 / 01:56:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBBreakpoint methodsFor:'accessing'!
+
+addr
+    ^ addr
+!
+
+disp
+    ^ disp
+!
+
+enabled
+    ^ enabled
+!
+
+file
+    ^ file
+!
+
+fullname
+    ^ fullname
+!
+
+func
+    ^ func
+!
+
+line
+    ^ line
+!
+
+number
+    ^ number
+!
+
+times
+    ^ times
+!
+
+type
+    ^ type
+! !
+
--- a/GDBBreakpointCreatedEvent.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/GDBBreakpointCreatedEvent.st	Sun Sep 07 14:42:02 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jv:libgdbs' }"
 
-GDBNotificationEvent subclass:#GDBBreakpointCreatedEvent
+GDBBreakpointEvent subclass:#GDBBreakpointCreatedEvent
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
--- a/GDBBreakpointDeletedEvent.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/GDBBreakpointDeletedEvent.st	Sun Sep 07 14:42:02 2014 +0100
@@ -1,14 +1,28 @@
 "{ Package: 'jv:libgdbs' }"
 
 GDBNotificationEvent subclass:#GDBBreakpointDeletedEvent
-	instanceVariableNames:''
+	instanceVariableNames:'id'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'GDB-Core-Events'
 !
 
+!GDBBreakpointDeletedEvent class methodsFor:'accessing - GDB value descriptors'!
+
+gdbValueDescriptor
+    ^ (super gdbValueDescriptor)
+        define: #id as: Integer;
+        yourself
+
+    "Created: / 06-09-2014 / 02:12:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !GDBBreakpointDeletedEvent methodsFor:'accessing'!
 
+id
+    ^ id
+!
+
 type
 	^  'breakpoint-deleted'
 ! !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBBreakpointEvent.st	Sun Sep 07 14:42:02 2014 +0100
@@ -0,0 +1,27 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBNotificationEvent subclass:#GDBBreakpointEvent
+	instanceVariableNames:'bkpt'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Events'
+!
+
+!GDBBreakpointEvent class methodsFor:'accessing - GDB value descriptors'!
+
+gdbValueDescriptor
+    ^ super gdbValueDescriptor
+        define: #bkpt as: GDBBreakpoint;
+        yourself
+
+    "Created: / 06-09-2014 / 01:52:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBBreakpointEvent methodsFor:'accessing'!
+
+breakpoint
+    ^ bkpt
+
+    "Created: / 06-09-2014 / 01:51:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/GDBBreakpointModifiedEvent.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/GDBBreakpointModifiedEvent.st	Sun Sep 07 14:42:02 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jv:libgdbs' }"
 
-GDBNotificationEvent subclass:#GDBBreakpointModifiedEvent
+GDBBreakpointEvent subclass:#GDBBreakpointModifiedEvent
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
--- a/GDBDebugger.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/GDBDebugger.st	Sun Sep 07 14:42:02 2014 +0100
@@ -1,7 +1,8 @@
 "{ Package: 'jv:libgdbs' }"
 
 Object subclass:#GDBDebugger
-	instanceVariableNames:'connection commandSequenceNumber inferiorStateSequenceNumber'
+	instanceVariableNames:'connection commandSequenceNumber inferiorStateSequenceNumber
+		inferiors'
 	classVariableNames:''
 	poolDictionaries:'GDBCommandStatus'
 	category:'GDB-Core'
@@ -49,6 +50,10 @@
 
     "Created: / 09-06-2014 / 10:01:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 09-06-2014 / 18:27:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+inferiors
+    ^ inferiors
 ! !
 
 !GDBDebugger methodsFor:'accessing-private'!
@@ -142,6 +147,50 @@
 
     "Created: / 03-06-2014 / 00:36:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 04-06-2014 / 09:28:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+onThreadGroupAdded:aGDBThreadGroupAddedEvent 
+    | inferior |
+    inferiors isNil ifTrue:[
+        inferiors := List new.
+    ].
+    inferior := GDBThreadGroup newWithId:aGDBThreadGroupAddedEvent id.
+    inferiors add:inferior.
+    aGDBThreadGroupAddedEvent setThreadGroup: inferior
+
+    "Modified: / 07-09-2014 / 13:36:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+onThreadGroupExited:aGDBThreadGroupExitedEvent 
+    | inferior |
+
+    inferiors notNil ifTrue:[ 
+        inferior := inferiors detect:[:e | e id = aGDBThreadGroupExitedEvent id ].
+    ].
+    inferior isNil ifTrue:[ 
+        self error:('Mo inferior with id "%1" ' bindWith: aGDBThreadGroupExitedEvent id)
+    ].
+    inferior setExitCode: aGDBThreadGroupExitedEvent exitCode.
+    aGDBThreadGroupExitedEvent setThreadGroup: inferior
+
+    "Created: / 06-09-2014 / 02:37:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 07-09-2014 / 13:36:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+onThreadGroupStarted:aGDBThreadGroupStartedEvent
+    | inferior |
+
+    inferiors notNil ifTrue:[ 
+        inferior := inferiors detect:[:e | e id = aGDBThreadGroupStartedEvent id ].
+    ].
+    inferior isNil ifTrue:[ 
+        self error:('Mo inferior with id "%1" ' bindWith: aGDBThreadGroupStartedEvent id)
+    ].
+    inferior setPid: aGDBThreadGroupStartedEvent pid.
+    aGDBThreadGroupStartedEvent setThreadGroup: inferior
+
+    "Created: / 06-09-2014 / 02:37:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 07-09-2014 / 13:36:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GDBDebugger methodsFor:'finalization'!
@@ -190,9 +239,14 @@
         when: GDBCommandEvent               send: #onCommand:           to: self;
         when: GDBCommandResultEvent         send: #onCommandResult:     to: self;
         when: GDBExitEvent                  send: #onExit:              to: self;
-        when: GDBExecutionEvent             send: #onExecutionEvent:    to: self.
+        when: GDBExecutionEvent             send: #onExecutionEvent:    to: self;
+
+        when: GDBThreadGroupAddedEvent      send: #onThreadGroupAdded:  to: self;
+        when: GDBThreadGroupStartedEvent    send: #onThreadGroupStarted: to: self;
+        when: GDBThreadGroupExitedEvent     send: #onThreadGroupExited: to: self.
 
     "Created: / 20-06-2014 / 22:07:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 06-09-2014 / 02:30:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 unsubscribe
--- a/GDBNotificationEvent.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/GDBNotificationEvent.st	Sun Sep 07 14:42:02 2014 +0100
@@ -7,6 +7,16 @@
 	category:'GDB-Core-Events'
 !
 
+!GDBNotificationEvent class methodsFor:'accessing - GDB value descriptors'!
+
+gdbValueDescriptor
+    ^ (super gdbValueDescriptor)
+        "/ define: #... as: ...
+        yourself
+
+    "Created: / 06-09-2014 / 02:07:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !GDBNotificationEvent methodsFor:'testing'!
 
 isNotificationEvent
--- a/GDBObject.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/GDBObject.st	Sun Sep 07 14:42:02 2014 +0100
@@ -38,9 +38,10 @@
 
 getProperty: nm of: object
 
-    | names index properties |
+    | nmXlated names index properties |
 
-    index := (names := object class allInstVarNames) indexOf: nm.
+    nmXlated := (nm includes: $-) ifTrue:[ nm copyReplaceAll: $- with: $_] ifFalse:[ nm ].
+    index := (names := object class allInstVarNames) indexOf: nmXlated.
     index ~~ 0 ifTrue:[ 
         ^ object instVarAt: index.
     ].
@@ -54,16 +55,17 @@
     ^ nil
 
     "Created: / 20-06-2014 / 08:59:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 06-09-2014 / 02:05:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 setProperty: nm of: object to: value
 
-    | names index properties |
+    | nmXlated names index properties |
 
-    index := (names := object class allInstVarNames) indexOf: nm.
+    nmXlated := (nm includes: $-) ifTrue:[ nm copyReplaceAll: $- with: $_] ifFalse:[ nm ].
+    index := (names := object class allInstVarNames) indexOf: nmXlated.
     index ~~ 0 ifTrue:[ 
         object instVarAt: index put: value.
-
     ] ifFalse:[
         index := names indexOf: #properties.
         index ~~ 0 ifTrue:[ 
@@ -77,28 +79,29 @@
     ].
 
     "Created: / 20-06-2014 / 09:01:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 06-09-2014 / 02:05:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GDBObject methodsFor:'accessing-properties'!
 
 properties
-    ^ GDBObject getPropertiesOf: self.
+    ^ self class getPropertiesOf: self.
 
-    "Modified: / 20-06-2014 / 09:04:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 06-09-2014 / 01:49:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 propertyAt: name
-    ^ GDBObject getProperty: name of: self
+    ^ self class getProperty: name of: self
 
     "Created: / 31-05-2014 / 00:00:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 20-06-2014 / 09:05:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 06-09-2014 / 01:49:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 propertyAt: name put: value
-    ^ GDBObject setProperty: name of: self to: value
+    ^ self class setProperty: name of: self to: value
 
     "Created: / 31-05-2014 / 00:01:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 20-06-2014 / 09:05:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 06-09-2014 / 01:49:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GDBObject methodsFor:'attributes access'!
--- a/GDBSimulatorProcess.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/GDBSimulatorProcess.st	Sun Sep 07 14:42:02 2014 +0100
@@ -46,10 +46,10 @@
 
 initialize
     pid := -1.
-    debuggerInput := GDBInternalPipeStream new.
-    debuggerOutput := GDBInternalPipeStream new.
+    debuggerInput := GDBInternalPipeStream newWithBufferSize: 2048.  
+    debuggerOutput := GDBInternalPipeStream newWithBufferSize: 2048.
 
-    "Modified: / 20-06-2014 / 22:18:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 07-09-2014 / 09:23:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GDBSimulatorProcess methodsFor:'processing'!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBThread.st	Sun Sep 07 14:42:02 2014 +0100
@@ -0,0 +1,19 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBObject subclass:#GDBThread
+	instanceVariableNames:'id group'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core'
+!
+
+!GDBThread class methodsFor:'accessing - GDB value descriptors'!
+
+gdbValueDescriptor
+    ^ (super gdbValueDescriptor)
+        define: #id as: Integer;
+        yourself
+
+    "Created: / 06-09-2014 / 02:21:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/GDBThreadCreatedEvent.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/GDBThreadCreatedEvent.st	Sun Sep 07 14:42:02 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jv:libgdbs' }"
 
-GDBNotificationEvent subclass:#GDBThreadCreatedEvent
+GDBThreadEvent subclass:#GDBThreadCreatedEvent
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBThreadEvent.st	Sun Sep 07 14:42:02 2014 +0100
@@ -0,0 +1,20 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBNotificationEvent subclass:#GDBThreadEvent
+	instanceVariableNames:'id group_id'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Events'
+!
+
+!GDBThreadEvent class methodsFor:'accessing - GDB value descriptors'!
+
+gdbValueDescriptor
+    ^ (super gdbValueDescriptor)
+        define: #id as: Integer;
+        define: #'group-id' as: String;
+        yourself
+
+    "Created: / 06-09-2014 / 02:08:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/GDBThreadExitedEvent.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/GDBThreadExitedEvent.st	Sun Sep 07 14:42:02 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jv:libgdbs' }"
 
-GDBNotificationEvent subclass:#GDBThreadExitedEvent
+GDBThreadEvent subclass:#GDBThreadExitedEvent
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBThreadGroup.st	Sun Sep 07 14:42:02 2014 +0100
@@ -0,0 +1,103 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBObject subclass:#GDBThreadGroup
+	instanceVariableNames:'id pid exit_code threads'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core'
+!
+
+!GDBThreadGroup class methodsFor:'instance creation'!
+
+newWithId: aString
+    ^ self new setId: aString; yourself
+
+    "Created: / 06-09-2014 / 02:31:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBThreadGroup class methodsFor:'accessing - GDB value descriptors'!
+
+gdbValueDescriptor
+    ^ (super gdbValueDescriptor)
+        define: #id as: String;
+        define: #pid as: Integer;
+        yourself
+
+    "Created: / 06-09-2014 / 02:21:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBThreadGroup methodsFor:'accessing'!
+
+exitCode
+    ^ exit_code
+
+    "Created: / 07-09-2014 / 12:34:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+id
+    ^ id
+!
+
+pid
+    ^ pid
+!
+
+threads
+    threads isNil ifTrue:[ 
+        threads := List new.
+    ].
+    ^ threads
+
+    "Modified: / 06-09-2014 / 02:23:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBThreadGroup methodsFor:'initialization'!
+
+setExitCode: anInteger
+    exit_code := anInteger.
+
+    "Created: / 06-09-2014 / 02:33:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+setId: aString
+    id := aString.
+
+    "Created: / 06-09-2014 / 02:32:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+setPid: anInteger
+    pid := anInteger.
+    exit_code := nil.
+
+    "Created: / 06-09-2014 / 02:32:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 07-09-2014 / 12:34:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBThreadGroup methodsFor:'private'!
+
+threadAdd: aGDBThread
+    self threads add: aGDBThread
+
+    "Created: / 06-09-2014 / 02:23:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+threadRemove: aGDBThread
+    self threads remove: aGDBThread
+
+    "Created: / 06-09-2014 / 02:23:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBThreadGroup methodsFor:'testing'!
+
+isDead
+    ^ exit_code notNil
+
+    "Created: / 06-09-2014 / 02:38:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isRunning
+    ^ pid notNil and: [ exit_code isNil ].
+
+    "Created: / 06-09-2014 / 02:38:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/GDBThreadGroupAddedEvent.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/GDBThreadGroupAddedEvent.st	Sun Sep 07 14:42:02 2014 +0100
@@ -1,6 +1,6 @@
 "{ Package: 'jv:libgdbs' }"
 
-GDBNotificationEvent subclass:#GDBThreadGroupAddedEvent
+GDBThreadGroupEvent subclass:#GDBThreadGroupAddedEvent
 	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GDBThreadGroupEvent.st	Sun Sep 07 14:42:02 2014 +0100
@@ -0,0 +1,37 @@
+"{ Package: 'jv:libgdbs' }"
+
+GDBNotificationEvent subclass:#GDBThreadGroupEvent
+	instanceVariableNames:'threadGroup id'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'GDB-Core-Events'
+!
+
+!GDBThreadGroupEvent class methodsFor:'accessing - GDB value descriptors'!
+
+gdbValueDescriptor
+    ^ (super gdbValueDescriptor)
+        define: #id as: String;
+        yourself
+
+    "Created: / 06-09-2014 / 02:10:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBThreadGroupEvent methodsFor:'accessing'!
+
+id
+    ^ id
+!
+
+threadGroup
+    ^ threadGroup
+! !
+
+!GDBThreadGroupEvent methodsFor:'initialization'!
+
+setThreadGroup: aGDBThreadGroup
+    threadGroup := aGDBThreadGroup
+
+    "Created: / 07-09-2014 / 12:45:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/GDBThreadGroupExitedEvent.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/GDBThreadGroupExitedEvent.st	Sun Sep 07 14:42:02 2014 +0100
@@ -1,14 +1,30 @@
 "{ Package: 'jv:libgdbs' }"
 
-GDBNotificationEvent subclass:#GDBThreadGroupExitedEvent
-	instanceVariableNames:''
+GDBThreadGroupEvent subclass:#GDBThreadGroupExitedEvent
+	instanceVariableNames:'exit_code'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'GDB-Core-Events'
 !
 
+!GDBThreadGroupExitedEvent class methodsFor:'accessing - GDB value descriptors'!
+
+gdbValueDescriptor
+    ^ (super gdbValueDescriptor)
+        define: #'exit-code' as: Integer;
+        yourself
+
+    "Created: / 06-09-2014 / 02:12:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !GDBThreadGroupExitedEvent methodsFor:'accessing'!
 
+exitCode
+    ^ exit_code
+
+    "Created: / 06-09-2014 / 02:11:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 type
 	^  'thread-group-exited'
 ! !
--- a/GDBThreadGroupStartedEvent.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/GDBThreadGroupStartedEvent.st	Sun Sep 07 14:42:02 2014 +0100
@@ -1,14 +1,28 @@
 "{ Package: 'jv:libgdbs' }"
 
-GDBNotificationEvent subclass:#GDBThreadGroupStartedEvent
-	instanceVariableNames:''
+GDBThreadGroupEvent subclass:#GDBThreadGroupStartedEvent
+	instanceVariableNames:'pid'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'GDB-Core-Events'
 !
 
+!GDBThreadGroupStartedEvent class methodsFor:'accessing - GDB value descriptors'!
+
+gdbValueDescriptor
+    ^ (super gdbValueDescriptor)
+        define: #pid as: Integer;
+        yourself
+
+    "Created: / 06-09-2014 / 02:10:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !GDBThreadGroupStartedEvent methodsFor:'accessing'!
 
+pid
+    ^ pid
+!
+
 type
 	^  'thread-group-started'
 ! !
--- a/Make.proto	Sun Sep 07 08:20:01 2014 +0100
+++ b/Make.proto	Sun Sep 07 14:42:02 2014 +0100
@@ -34,7 +34,7 @@
 # add the path(es) here:,
 # ********** OPTIONAL: MODIFY the next lines ***
 # LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/announcements -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/announcements -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic2
 
 
 # if you need any additional defines for embedded C code,
@@ -141,6 +141,7 @@
 $(OUTDIR)GDBValueDescriptorError.$(O) GDBValueDescriptorError.$(H): GDBValueDescriptorError.st $(INCLUDE_TOP)/stx/libbasic/Error.$(H) $(INCLUDE_TOP)/stx/libbasic/Exception.$(H) $(INCLUDE_TOP)/stx/libbasic/GenericException.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)jv_libgdbs.$(O) jv_libgdbs.$(H): jv_libgdbs.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
 $(OUTDIR)GDBAsyncEvent.$(O) GDBAsyncEvent.$(H): GDBAsyncEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBBreakpoint.$(O) GDBBreakpoint.$(H): GDBBreakpoint.st $(INCLUDE_TOP)/jv/libgdbs/GDBObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBCLICommand.$(O) GDBCLICommand.$(H): GDBCLICommand.st $(INCLUDE_TOP)/jv/libgdbs/GDBCommand.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBCommandEvent.$(O) GDBCommandEvent.$(H): GDBCommandEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBCommandResult.$(O) GDBCommandResult.$(H): GDBCommandResult.st $(INCLUDE_TOP)/jv/libgdbs/GDBObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -156,6 +157,8 @@
 $(OUTDIR)GDBSessionRecorder.$(O) GDBSessionRecorder.$(H): GDBSessionRecorder.st $(INCLUDE_TOP)/jv/libgdbs/GDBDebugFlags.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBSimulatorProcess.$(O) GDBSimulatorProcess.$(H): GDBSimulatorProcess.st $(INCLUDE_TOP)/jv/libgdbs/GDBProcess.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBStreamOutputEvent.$(O) GDBStreamOutputEvent.$(H): GDBStreamOutputEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThread.$(O) GDBThread.$(H): GDBThread.st $(INCLUDE_TOP)/jv/libgdbs/GDBObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadGroup.$(O) GDBThreadGroup.$(H): GDBThreadGroup.st $(INCLUDE_TOP)/jv/libgdbs/GDBObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBUnixProcess.$(O) GDBUnixProcess.$(H): GDBUnixProcess.st $(INCLUDE_TOP)/jv/libgdbs/GDBProcess.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBAddresValueDescriptor.$(O) GDBAddresValueDescriptor.$(H): GDBAddresValueDescriptor.st $(INCLUDE_TOP)/jv/libgdbs/GDBPrimitiveValueDescriptor.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBValueDescriptor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBBooleanValueDescriptor.$(O) GDBBooleanValueDescriptor.$(H): GDBBooleanValueDescriptor.st $(INCLUDE_TOP)/jv/libgdbs/GDBPrimitiveValueDescriptor.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBValueDescriptor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -279,18 +282,21 @@
 $(OUTDIR)GDBStatusEvent.$(O) GDBStatusEvent.$(H): GDBStatusEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBStringValueDescriptor.$(O) GDBStringValueDescriptor.$(H): GDBStringValueDescriptor.st $(INCLUDE_TOP)/jv/libgdbs/GDBPrimitiveValueDescriptor.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBValueDescriptor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBTargetOutputEvent.$(O) GDBTargetOutputEvent.$(H): GDBTargetOutputEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBStreamOutputEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GDBBreakpointCreatedEvent.$(O) GDBBreakpointCreatedEvent.$(H): GDBBreakpointCreatedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBBreakpointDeletedEvent.$(O) GDBBreakpointDeletedEvent.$(H): GDBBreakpointDeletedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GDBBreakpointModifiedEvent.$(O) GDBBreakpointModifiedEvent.$(H): GDBBreakpointModifiedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBBreakpointEvent.$(O) GDBBreakpointEvent.$(H): GDBBreakpointEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBLibraryLoadedEvent.$(O) GDBLibraryLoadedEvent.$(H): GDBLibraryLoadedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBLibraryUnloadedEvent.$(O) GDBLibraryUnloadedEvent.$(H): GDBLibraryUnloadedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBRunningEvent.$(O) GDBRunningEvent.$(H): GDBRunningEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBExecutionEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)GDBStoppedEvent.$(O) GDBStoppedEvent.$(H): GDBStoppedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBExecutionEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GDBThreadCreatedEvent.$(O) GDBThreadCreatedEvent.$(H): GDBThreadCreatedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GDBThreadExitedEvent.$(O) GDBThreadExitedEvent.$(H): GDBThreadExitedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GDBThreadGroupAddedEvent.$(O) GDBThreadGroupAddedEvent.$(H): GDBThreadGroupAddedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GDBThreadGroupExitedEvent.$(O) GDBThreadGroupExitedEvent.$(H): GDBThreadGroupExitedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)GDBThreadGroupStartedEvent.$(O) GDBThreadGroupStartedEvent.$(H): GDBThreadGroupStartedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadEvent.$(O) GDBThreadEvent.$(H): GDBThreadEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadGroupEvent.$(O) GDBThreadGroupEvent.$(H): GDBThreadGroupEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBBreakpointCreatedEvent.$(O) GDBBreakpointCreatedEvent.$(H): GDBBreakpointCreatedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBBreakpointEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBBreakpointModifiedEvent.$(O) GDBBreakpointModifiedEvent.$(H): GDBBreakpointModifiedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBBreakpointEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadCreatedEvent.$(O) GDBThreadCreatedEvent.$(H): GDBThreadCreatedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBThreadEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadExitedEvent.$(O) GDBThreadExitedEvent.$(H): GDBThreadExitedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBThreadEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadGroupAddedEvent.$(O) GDBThreadGroupAddedEvent.$(H): GDBThreadGroupAddedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBThreadGroupEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadGroupExitedEvent.$(O) GDBThreadGroupExitedEvent.$(H): GDBThreadGroupExitedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBThreadGroupEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadGroupStartedEvent.$(O) GDBThreadGroupStartedEvent.$(H): GDBThreadGroupStartedEvent.st $(INCLUDE_TOP)/jv/libgdbs/GDBAsyncEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBNotificationEvent.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBThreadGroupEvent.$(H) $(INCLUDE_TOP)/stx/goodies/announcements/Announcement.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/libbasic/ArithmeticValue.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Boolean.$(H) $(INCLUDE_TOP)/stx/libbasic/CharacterArray.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Integer.$(H) $(INCLUDE_TOP)/stx/libbasic/Magnitude.$(H) $(INCLUDE_TOP)/stx/libbasic/Number.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
--- a/Make.spec	Sun Sep 07 08:20:01 2014 +0100
+++ b/Make.spec	Sun Sep 07 14:42:02 2014 +0100
@@ -64,6 +64,7 @@
 	GDBValueDescriptorError \
 	jv_libgdbs \
 	GDBAsyncEvent \
+	GDBBreakpoint \
 	GDBCLICommand \
 	GDBCommandEvent \
 	GDBCommandResult \
@@ -79,6 +80,8 @@
 	GDBSessionRecorder \
 	GDBSimulatorProcess \
 	GDBStreamOutputEvent \
+	GDBThread \
+	GDBThreadGroup \
 	GDBUnixProcess \
 	GDBAddresValueDescriptor \
 	GDBBooleanValueDescriptor \
@@ -202,13 +205,16 @@
 	GDBStatusEvent \
 	GDBStringValueDescriptor \
 	GDBTargetOutputEvent \
-	GDBBreakpointCreatedEvent \
 	GDBBreakpointDeletedEvent \
-	GDBBreakpointModifiedEvent \
+	GDBBreakpointEvent \
 	GDBLibraryLoadedEvent \
 	GDBLibraryUnloadedEvent \
 	GDBRunningEvent \
 	GDBStoppedEvent \
+	GDBThreadEvent \
+	GDBThreadGroupEvent \
+	GDBBreakpointCreatedEvent \
+	GDBBreakpointModifiedEvent \
 	GDBThreadCreatedEvent \
 	GDBThreadExitedEvent \
 	GDBThreadGroupAddedEvent \
@@ -233,6 +239,7 @@
     $(OUTDIR_SLASH)GDBValueDescriptorError.$(O) \
     $(OUTDIR_SLASH)jv_libgdbs.$(O) \
     $(OUTDIR_SLASH)GDBAsyncEvent.$(O) \
+    $(OUTDIR_SLASH)GDBBreakpoint.$(O) \
     $(OUTDIR_SLASH)GDBCLICommand.$(O) \
     $(OUTDIR_SLASH)GDBCommandEvent.$(O) \
     $(OUTDIR_SLASH)GDBCommandResult.$(O) \
@@ -248,6 +255,8 @@
     $(OUTDIR_SLASH)GDBSessionRecorder.$(O) \
     $(OUTDIR_SLASH)GDBSimulatorProcess.$(O) \
     $(OUTDIR_SLASH)GDBStreamOutputEvent.$(O) \
+    $(OUTDIR_SLASH)GDBThread.$(O) \
+    $(OUTDIR_SLASH)GDBThreadGroup.$(O) \
     $(OUTDIR_SLASH)GDBUnixProcess.$(O) \
     $(OUTDIR_SLASH)GDBAddresValueDescriptor.$(O) \
     $(OUTDIR_SLASH)GDBBooleanValueDescriptor.$(O) \
@@ -371,13 +380,16 @@
     $(OUTDIR_SLASH)GDBStatusEvent.$(O) \
     $(OUTDIR_SLASH)GDBStringValueDescriptor.$(O) \
     $(OUTDIR_SLASH)GDBTargetOutputEvent.$(O) \
-    $(OUTDIR_SLASH)GDBBreakpointCreatedEvent.$(O) \
     $(OUTDIR_SLASH)GDBBreakpointDeletedEvent.$(O) \
-    $(OUTDIR_SLASH)GDBBreakpointModifiedEvent.$(O) \
+    $(OUTDIR_SLASH)GDBBreakpointEvent.$(O) \
     $(OUTDIR_SLASH)GDBLibraryLoadedEvent.$(O) \
     $(OUTDIR_SLASH)GDBLibraryUnloadedEvent.$(O) \
     $(OUTDIR_SLASH)GDBRunningEvent.$(O) \
     $(OUTDIR_SLASH)GDBStoppedEvent.$(O) \
+    $(OUTDIR_SLASH)GDBThreadEvent.$(O) \
+    $(OUTDIR_SLASH)GDBThreadGroupEvent.$(O) \
+    $(OUTDIR_SLASH)GDBBreakpointCreatedEvent.$(O) \
+    $(OUTDIR_SLASH)GDBBreakpointModifiedEvent.$(O) \
     $(OUTDIR_SLASH)GDBThreadCreatedEvent.$(O) \
     $(OUTDIR_SLASH)GDBThreadExitedEvent.$(O) \
     $(OUTDIR_SLASH)GDBThreadGroupAddedEvent.$(O) \
--- a/abbrev.stc	Sun Sep 07 08:20:01 2014 +0100
+++ b/abbrev.stc	Sun Sep 07 14:42:02 2014 +0100
@@ -16,6 +16,7 @@
 GDBValueDescriptorError GDBValueDescriptorError jv:libgdbs 'GDB-Private-Descriptors' 1
 jv_libgdbs jv_libgdbs jv:libgdbs '* Projects & Packages *' 3
 GDBAsyncEvent GDBAsyncEvent jv:libgdbs 'GDB-Core-Events' 0
+GDBBreakpoint GDBBreakpoint jv:libgdbs 'GDB-Core' 0
 GDBCLICommand GDBCLICommand jv:libgdbs 'GDB-Core-Commands' 0
 GDBCommandEvent GDBCommandEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBCommandResult GDBCommandResult jv:libgdbs 'GDB-Core-Commands' 0
@@ -31,6 +32,8 @@
 GDBSessionRecorder GDBSessionRecorder jv:libgdbs 'GDB-Private-Simulator' 0
 GDBSimulatorProcess GDBSimulatorProcess jv:libgdbs 'GDB-Private-Simulator' 0
 GDBStreamOutputEvent GDBStreamOutputEvent jv:libgdbs 'GDB-Core-Events' 0
+GDBThread GDBThread jv:libgdbs 'GDB-Core' 0
+GDBThreadGroup GDBThreadGroup jv:libgdbs 'GDB-Core' 0
 GDBUnixProcess GDBUnixProcess jv:libgdbs 'GDB-Private' 0
 GDBAddresValueDescriptor GDBAddresValueDescriptor jv:libgdbs 'GDB-Private-Descriptors' 0
 GDBBooleanValueDescriptor GDBBooleanValueDescriptor jv:libgdbs 'GDB-Private-Descriptors' 0
@@ -154,13 +157,16 @@
 GDBStatusEvent GDBStatusEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBStringValueDescriptor GDBStringValueDescriptor jv:libgdbs 'GDB-Private-Descriptors' 0
 GDBTargetOutputEvent GDBTargetOutputEvent jv:libgdbs 'GDB-Core-Events' 0
-GDBBreakpointCreatedEvent GDBBreakpointCreatedEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBBreakpointDeletedEvent GDBBreakpointDeletedEvent jv:libgdbs 'GDB-Core-Events' 0
-GDBBreakpointModifiedEvent GDBBreakpointModifiedEvent jv:libgdbs 'GDB-Core-Events' 0
+GDBBreakpointEvent GDBBreakpointEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBLibraryLoadedEvent GDBLibraryLoadedEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBLibraryUnloadedEvent GDBLibraryUnloadedEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBRunningEvent GDBRunningEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBStoppedEvent GDBStoppedEvent jv:libgdbs 'GDB-Core-Events' 0
+GDBThreadEvent GDBThreadEvent jv:libgdbs 'GDB-Core-Events' 0
+GDBThreadGroupEvent GDBThreadGroupEvent jv:libgdbs 'GDB-Core-Events' 0
+GDBBreakpointCreatedEvent GDBBreakpointCreatedEvent jv:libgdbs 'GDB-Core-Events' 0
+GDBBreakpointModifiedEvent GDBBreakpointModifiedEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBThreadCreatedEvent GDBThreadCreatedEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBThreadExitedEvent GDBThreadExitedEvent jv:libgdbs 'GDB-Core-Events' 0
 GDBThreadGroupAddedEvent GDBThreadGroupAddedEvent jv:libgdbs 'GDB-Core-Events' 0
--- a/bc.mak	Sun Sep 07 08:20:01 2014 +0100
+++ b/bc.mak	Sun Sep 07 14:42:02 2014 +0100
@@ -34,7 +34,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\announcements -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\announcements -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic2
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
@@ -87,6 +87,7 @@
 $(OUTDIR)GDBValueDescriptorError.$(O) GDBValueDescriptorError.$(H): GDBValueDescriptorError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)jv_libgdbs.$(O) jv_libgdbs.$(H): jv_libgdbs.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
 $(OUTDIR)GDBAsyncEvent.$(O) GDBAsyncEvent.$(H): GDBAsyncEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBBreakpoint.$(O) GDBBreakpoint.$(H): GDBBreakpoint.st $(INCLUDE_TOP)\jv\libgdbs\GDBObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBCLICommand.$(O) GDBCLICommand.$(H): GDBCLICommand.st $(INCLUDE_TOP)\jv\libgdbs\GDBCommand.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBCommandEvent.$(O) GDBCommandEvent.$(H): GDBCommandEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBCommandResult.$(O) GDBCommandResult.$(H): GDBCommandResult.st $(INCLUDE_TOP)\jv\libgdbs\GDBObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -102,6 +103,8 @@
 $(OUTDIR)GDBSessionRecorder.$(O) GDBSessionRecorder.$(H): GDBSessionRecorder.st $(INCLUDE_TOP)\jv\libgdbs\GDBDebugFlags.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBSimulatorProcess.$(O) GDBSimulatorProcess.$(H): GDBSimulatorProcess.st $(INCLUDE_TOP)\jv\libgdbs\GDBProcess.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBStreamOutputEvent.$(O) GDBStreamOutputEvent.$(H): GDBStreamOutputEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThread.$(O) GDBThread.$(H): GDBThread.st $(INCLUDE_TOP)\jv\libgdbs\GDBObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadGroup.$(O) GDBThreadGroup.$(H): GDBThreadGroup.st $(INCLUDE_TOP)\jv\libgdbs\GDBObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBUnixProcess.$(O) GDBUnixProcess.$(H): GDBUnixProcess.st $(INCLUDE_TOP)\jv\libgdbs\GDBProcess.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBAddresValueDescriptor.$(O) GDBAddresValueDescriptor.$(H): GDBAddresValueDescriptor.st $(INCLUDE_TOP)\jv\libgdbs\GDBPrimitiveValueDescriptor.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBValueDescriptor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBBooleanValueDescriptor.$(O) GDBBooleanValueDescriptor.$(H): GDBBooleanValueDescriptor.st $(INCLUDE_TOP)\jv\libgdbs\GDBPrimitiveValueDescriptor.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBValueDescriptor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -225,18 +228,21 @@
 $(OUTDIR)GDBStatusEvent.$(O) GDBStatusEvent.$(H): GDBStatusEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBStringValueDescriptor.$(O) GDBStringValueDescriptor.$(H): GDBStringValueDescriptor.st $(INCLUDE_TOP)\jv\libgdbs\GDBPrimitiveValueDescriptor.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBValueDescriptor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBTargetOutputEvent.$(O) GDBTargetOutputEvent.$(H): GDBTargetOutputEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBStreamOutputEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)GDBBreakpointCreatedEvent.$(O) GDBBreakpointCreatedEvent.$(H): GDBBreakpointCreatedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBBreakpointDeletedEvent.$(O) GDBBreakpointDeletedEvent.$(H): GDBBreakpointDeletedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)GDBBreakpointModifiedEvent.$(O) GDBBreakpointModifiedEvent.$(H): GDBBreakpointModifiedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBBreakpointEvent.$(O) GDBBreakpointEvent.$(H): GDBBreakpointEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBLibraryLoadedEvent.$(O) GDBLibraryLoadedEvent.$(H): GDBLibraryLoadedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBLibraryUnloadedEvent.$(O) GDBLibraryUnloadedEvent.$(H): GDBLibraryUnloadedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBRunningEvent.$(O) GDBRunningEvent.$(H): GDBRunningEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBExecutionEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)GDBStoppedEvent.$(O) GDBStoppedEvent.$(H): GDBStoppedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBExecutionEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)GDBThreadCreatedEvent.$(O) GDBThreadCreatedEvent.$(H): GDBThreadCreatedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)GDBThreadExitedEvent.$(O) GDBThreadExitedEvent.$(H): GDBThreadExitedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)GDBThreadGroupAddedEvent.$(O) GDBThreadGroupAddedEvent.$(H): GDBThreadGroupAddedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)GDBThreadGroupExitedEvent.$(O) GDBThreadGroupExitedEvent.$(H): GDBThreadGroupExitedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)GDBThreadGroupStartedEvent.$(O) GDBThreadGroupStartedEvent.$(H): GDBThreadGroupStartedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadEvent.$(O) GDBThreadEvent.$(H): GDBThreadEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadGroupEvent.$(O) GDBThreadGroupEvent.$(H): GDBThreadGroupEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBBreakpointCreatedEvent.$(O) GDBBreakpointCreatedEvent.$(H): GDBBreakpointCreatedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBBreakpointEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBBreakpointModifiedEvent.$(O) GDBBreakpointModifiedEvent.$(H): GDBBreakpointModifiedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBBreakpointEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadCreatedEvent.$(O) GDBThreadCreatedEvent.$(H): GDBThreadCreatedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBThreadEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadExitedEvent.$(O) GDBThreadExitedEvent.$(H): GDBThreadExitedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBThreadEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadGroupAddedEvent.$(O) GDBThreadGroupAddedEvent.$(H): GDBThreadGroupAddedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBThreadGroupEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadGroupExitedEvent.$(O) GDBThreadGroupExitedEvent.$(H): GDBThreadGroupExitedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBThreadGroupEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)GDBThreadGroupStartedEvent.$(O) GDBThreadGroupStartedEvent.$(H): GDBThreadGroupStartedEvent.st $(INCLUDE_TOP)\jv\libgdbs\GDBAsyncEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBNotificationEvent.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBThreadGroupEvent.$(H) $(INCLUDE_TOP)\stx\goodies\announcements\Announcement.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\libbasic\ArithmeticValue.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Boolean.$(H) $(INCLUDE_TOP)\stx\libbasic\CharacterArray.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Integer.$(H) $(INCLUDE_TOP)\stx\libbasic\Magnitude.$(H) $(INCLUDE_TOP)\stx\libbasic\Number.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
--- a/jv_libgdbs.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/jv_libgdbs.st	Sun Sep 07 14:42:02 2014 +0100
@@ -42,6 +42,7 @@
      by searching all classes (and their packages) which are referenced by my classes."
 
     ^ #(
+        #'stx:libbasic2'    "List - referenced by GDBDebugger>>onThreadGroupAdded:"
     )
 !
 
@@ -80,6 +81,7 @@
         GDBValueDescriptorError
         #'jv_libgdbs'
         GDBAsyncEvent
+        GDBBreakpoint
         GDBCLICommand
         GDBCommandEvent
         GDBCommandResult
@@ -95,6 +97,8 @@
         GDBSessionRecorder
         GDBSimulatorProcess
         GDBStreamOutputEvent
+        GDBThread
+        GDBThreadGroup
         GDBUnixProcess
         GDBAddresValueDescriptor
         GDBBooleanValueDescriptor
@@ -218,13 +222,16 @@
         GDBStatusEvent
         GDBStringValueDescriptor
         GDBTargetOutputEvent
-        GDBBreakpointCreatedEvent
         GDBBreakpointDeletedEvent
-        GDBBreakpointModifiedEvent
+        GDBBreakpointEvent
         GDBLibraryLoadedEvent
         GDBLibraryUnloadedEvent
         GDBRunningEvent
         GDBStoppedEvent
+        GDBThreadEvent
+        GDBThreadGroupEvent
+        GDBBreakpointCreatedEvent
+        GDBBreakpointModifiedEvent
         GDBThreadCreatedEvent
         GDBThreadExitedEvent
         GDBThreadGroupAddedEvent
--- a/libInit.cc	Sun Sep 07 08:20:01 2014 +0100
+++ b/libInit.cc	Sun Sep 07 14:42:02 2014 +0100
@@ -41,6 +41,7 @@
 _GDBValueDescriptorError_Init(pass,__pRT__,snd);
 _jv_137libgdbs_Init(pass,__pRT__,snd);
 _GDBAsyncEvent_Init(pass,__pRT__,snd);
+_GDBBreakpoint_Init(pass,__pRT__,snd);
 _GDBCLICommand_Init(pass,__pRT__,snd);
 _GDBCommandEvent_Init(pass,__pRT__,snd);
 _GDBCommandResult_Init(pass,__pRT__,snd);
@@ -56,6 +57,8 @@
 _GDBSessionRecorder_Init(pass,__pRT__,snd);
 _GDBSimulatorProcess_Init(pass,__pRT__,snd);
 _GDBStreamOutputEvent_Init(pass,__pRT__,snd);
+_GDBThread_Init(pass,__pRT__,snd);
+_GDBThreadGroup_Init(pass,__pRT__,snd);
 _GDBUnixProcess_Init(pass,__pRT__,snd);
 _GDBAddresValueDescriptor_Init(pass,__pRT__,snd);
 _GDBBooleanValueDescriptor_Init(pass,__pRT__,snd);
@@ -179,13 +182,16 @@
 _GDBStatusEvent_Init(pass,__pRT__,snd);
 _GDBStringValueDescriptor_Init(pass,__pRT__,snd);
 _GDBTargetOutputEvent_Init(pass,__pRT__,snd);
-_GDBBreakpointCreatedEvent_Init(pass,__pRT__,snd);
 _GDBBreakpointDeletedEvent_Init(pass,__pRT__,snd);
-_GDBBreakpointModifiedEvent_Init(pass,__pRT__,snd);
+_GDBBreakpointEvent_Init(pass,__pRT__,snd);
 _GDBLibraryLoadedEvent_Init(pass,__pRT__,snd);
 _GDBLibraryUnloadedEvent_Init(pass,__pRT__,snd);
 _GDBRunningEvent_Init(pass,__pRT__,snd);
 _GDBStoppedEvent_Init(pass,__pRT__,snd);
+_GDBThreadEvent_Init(pass,__pRT__,snd);
+_GDBThreadGroupEvent_Init(pass,__pRT__,snd);
+_GDBBreakpointCreatedEvent_Init(pass,__pRT__,snd);
+_GDBBreakpointModifiedEvent_Init(pass,__pRT__,snd);
 _GDBThreadCreatedEvent_Init(pass,__pRT__,snd);
 _GDBThreadExitedEvent_Init(pass,__pRT__,snd);
 _GDBThreadGroupAddedEvent_Init(pass,__pRT__,snd);
--- a/libgdbs.rc	Sun Sep 07 08:20:01 2014 +0100
+++ b/libgdbs.rc	Sun Sep 07 14:42:02 2014 +0100
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
       VALUE "ProductName", "LibraryName\0"
       VALUE "ProductVersion", "6.2.4.0\0"
-      VALUE "ProductDate", "Tue, 26 Aug 2014 08:51:30 GMT\0"
+      VALUE "ProductDate", "Sun, 07 Sep 2014 13:39:29 GMT\0"
     END
 
   END
--- a/tests/GDBDebuggerTests.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/tests/GDBDebuggerTests.st	Sun Sep 07 14:42:02 2014 +0100
@@ -1,7 +1,7 @@
 "{ Package: 'jv:libgdbs/tests' }"
 
 TestCase subclass:#GDBDebuggerTests
-	instanceVariableNames:''
+	instanceVariableNames:'debugger simulator'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'GDB-Core-Tests'
@@ -25,10 +25,19 @@
 "
 ! !
 
+!GDBDebuggerTests methodsFor:'running'!
+
+tearDown
+    simulator notNil ifTrue:[ simulator stop ].
+    debugger notNil ifTrue:[ debugger release ].
+
+    "Created: / 06-09-2014 / 02:17:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !GDBDebuggerTests methodsFor:'tests - basic'!
 
 test_basic_01
-    | debugger timeouted |
+    | timeouted |
 
     debugger := GDBDebugger new.
     self assert: debugger isConnected.
@@ -41,16 +50,53 @@
     self assert: debugger isConnected not.
 
     "Created: / 24-06-2014 / 09:06:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 06-09-2014 / 02:16:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 test_basic_02
-    | simulator debugger |
+    simulator := GDBSimulatorProcess new record: GDBSimulatorResource session_factorial_01.
+    simulator start.
+    debugger := GDBDebugger newWithProcess: simulator.
+
+    "Created: / 24-06-2014 / 09:09:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 06-09-2014 / 02:18:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!GDBDebuggerTests methodsFor:'tests - threads'!
+
+test_inferiors_01a
+    | event |
 
     simulator := GDBSimulatorProcess new record: GDBSimulatorResource session_factorial_01.
+    simulator start.
     debugger := GDBDebugger newWithProcess: simulator.
-    simulator start.
+    debugger announcer when: GDBThreadGroupEvent do:[:ev |  
+        event := ev.
+    ].
+
+    debugger send: (GDBMI_file_exec_and_symbols new arguments: {'/home/jv/Private/Projects/SmalltalkX/sources/branches/jv1/build/jv/libgdbs/tests/c/factorial'}).
+    debugger send: (GDBCLICommand new value: 'b factorial').
+
+    self assert: debugger inferiors size == 1.
+    self assert: debugger inferiors anElement id = 'i1'.
+    "/ No, following won't work as thread-group-added event is
+    "/ emited before we register the handler above!!
+    "/ self assert: debugger inferiors anElement == event threadGroup.
 
-    "Created: / 24-06-2014 / 09:09:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    debugger send: (GDBCLICommand new value: 'r').
+
+    self assert: debugger inferiors size == 1.
+    self assert: debugger inferiors anElement pid = 7719.
+    self assert: debugger inferiors anElement == event threadGroup.
+
+    debugger send: (GDBCLICommand new value: 'del 1').
+    debugger send: (GDBCLICommand new value: 'c').
+
+    self assert: debugger inferiors size == 1.
+    self assert: debugger inferiors anElement exitCode = 23.
+    self assert: debugger inferiors anElement == event threadGroup.
+
+    "Created: / 07-09-2014 / 13:37:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GDBDebuggerTests class methodsFor:'documentation'!
--- a/tests/GDBParserTests.st	Sun Sep 07 08:20:01 2014 +0100
+++ b/tests/GDBParserTests.st	Sun Sep 07 14:42:02 2014 +0100
@@ -218,7 +218,15 @@
     self assert: events first value = 'Breakpoint 2 at 0x400527: file factorial.c, line 4.
 '.
     self assert: events second isNotificationEvent.
+    self assert: events second class == GDBBreakpointCreatedEvent.
     self assert: events second type = 'breakpoint-created'.
+    self assert: events second breakpoint notNil.
+    self assert: events second breakpoint class == GDBBreakpoint.
+    self assert: events second breakpoint number = 2.
+    self assert: events second breakpoint file = 'factorial.c'.
+    
+    
+
 
     parser := GDBParser on:'&"info break\n"
 ~"Num     Type           Disp Enb Address            What\n"
@@ -277,7 +285,7 @@
     self assert: (events at:7) type = 'stopped'.
 
     "Created: / 01-06-2014 / 22:57:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 19-06-2014 / 21:55:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 06-09-2014 / 01:38:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !GDBParserTests methodsFor:'tests - values'!
--- a/tests/tests.rc	Sun Sep 07 08:20:01 2014 +0100
+++ b/tests/tests.rc	Sun Sep 07 14:42:02 2014 +0100
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
       VALUE "ProductName", "LibraryName\0"
       VALUE "ProductVersion", "6.2.4.0\0"
-      VALUE "ProductDate", "Tue, 26 Aug 2014 08:51:33 GMT\0"
+      VALUE "ProductDate", "Sun, 07 Sep 2014 13:39:31 GMT\0"
     END
 
   END