Initial support for breakpoints
authorJan Vrany <jan.vrany@fit.cvut.cz>
Tue, 11 Jul 2017 09:07:35 +0200
changeset 46 6b857f3cec8c
parent 45 cd9f46746fd1
child 47 25d82943a3cf
Initial support for breakpoints
Make.proto
Make.spec
VDBAbstractApplication.st
VDBAbstractConsoleApplication.st
VDBAbstractListApplication.st
VDBBreakpointApplication.st
VDBBreakpointListApplication.st
VDBBreakpointPresenter.st
VDBDebuggerApplication.st
VDBFrameApplication.st
VDBModelPresenter.st
VDBStackApplication.st
VDBVariablePresenter.st
abbrev.stc
application/Make.proto
application/bc.mak
application/builder/baseline.rbspec
application/builder/package.deps.rake
application/jv_vdb_application.st
application/modules.stx
bc.mak
jv_vdb.st
libInit.cc
--- a/Make.proto	Wed Jul 12 16:28:50 2017 +0200
+++ b/Make.proto	Tue Jul 11 09:07:35 2017 +0200
@@ -34,7 +34,7 @@
 # add the path(es) here:,
 # ********** OPTIONAL: MODIFY the next lines ***
 # LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/jv/libgdbs -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic2 -I$(INCLUDE_TOP)/stx/libtool -I$(INCLUDE_TOP)/stx/libtool2 -I$(INCLUDE_TOP)/stx/libview -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)/jv/libgdbs -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic2 -I$(INCLUDE_TOP)/stx/libtool -I$(INCLUDE_TOP)/stx/libtool2 -I$(INCLUDE_TOP)/stx/libview -I$(INCLUDE_TOP)/stx/libview2 -I$(INCLUDE_TOP)/stx/libwidg -I$(INCLUDE_TOP)/stx/libwidg2
 
 
 # if you need any additional defines for embedded C code,
@@ -133,6 +133,8 @@
 $(OUTDIR)VDBAbstractConsoleApplication.$(O) VDBAbstractConsoleApplication.$(C) VDBAbstractConsoleApplication.$(H): VDBAbstractConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractContainer.$(O) VDBAbstractContainer.$(C) VDBAbstractContainer.$(H): VDBAbstractContainer.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractListApplication.$(O) VDBAbstractListApplication.$(C) VDBAbstractListApplication.$(H): VDBAbstractListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBBreakpointApplication.$(O) VDBBreakpointApplication.$(C) VDBBreakpointApplication.$(H): VDBBreakpointApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBBreakpointPresenter.$(O) VDBBreakpointPresenter.$(C) VDBBreakpointPresenter.$(H): VDBBreakpointPresenter.st $(INCLUDE_TOP)/jv/vdb/VDBModelPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBDebuggerApplication.$(O) VDBDebuggerApplication.$(C) VDBDebuggerApplication.$(H): VDBDebuggerApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBEventLogApplication.$(O) VDBEventLogApplication.$(C) VDBEventLogApplication.$(H): VDBEventLogApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBFramePresenter.$(O) VDBFramePresenter.$(C) VDBFramePresenter.$(H): VDBFramePresenter.st $(INCLUDE_TOP)/jv/vdb/VDBModelPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
@@ -141,6 +143,7 @@
 $(OUTDIR)VDBThreadPresenter.$(O) VDBThreadPresenter.$(C) VDBThreadPresenter.$(H): VDBThreadPresenter.st $(INCLUDE_TOP)/jv/vdb/VDBModelPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBVariablePresenter.$(O) VDBVariablePresenter.$(C) VDBVariablePresenter.$(H): VDBVariablePresenter.st $(INCLUDE_TOP)/jv/vdb/VDBModelPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractTreeApplication.$(O) VDBAbstractTreeApplication.$(C) VDBAbstractTreeApplication.$(H): VDBAbstractTreeApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBBreakpointListApplication.$(O) VDBBreakpointListApplication.$(C) VDBBreakpointListApplication.$(H): VDBBreakpointListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBDebuggerConsoleApplication.$(O) VDBDebuggerConsoleApplication.$(C) VDBDebuggerConsoleApplication.$(H): VDBDebuggerConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBInferiorConsoleApplication.$(O) VDBInferiorConsoleApplication.$(C) VDBInferiorConsoleApplication.$(H): VDBInferiorConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
 $(OUTDIR)VDBTabbingContainer.$(O) VDBTabbingContainer.$(C) VDBTabbingContainer.$(H): VDBTabbingContainer.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContainer.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
--- a/Make.spec	Wed Jul 12 16:28:50 2017 +0200
+++ b/Make.spec	Tue Jul 11 09:07:35 2017 +0200
@@ -58,6 +58,8 @@
 	VDBAbstractConsoleApplication \
 	VDBAbstractContainer \
 	VDBAbstractListApplication \
+	VDBBreakpointApplication \
+	VDBBreakpointPresenter \
 	VDBDebuggerApplication \
 	VDBEventLogApplication \
 	VDBFramePresenter \
@@ -66,6 +68,7 @@
 	VDBThreadPresenter \
 	VDBVariablePresenter \
 	VDBAbstractTreeApplication \
+	VDBBreakpointListApplication \
 	VDBDebuggerConsoleApplication \
 	VDBInferiorConsoleApplication \
 	VDBTabbingContainer \
@@ -83,6 +86,8 @@
     $(OUTDIR)VDBAbstractConsoleApplication.$(O) \
     $(OUTDIR)VDBAbstractContainer.$(O) \
     $(OUTDIR)VDBAbstractListApplication.$(O) \
+    $(OUTDIR)VDBBreakpointApplication.$(O) \
+    $(OUTDIR)VDBBreakpointPresenter.$(O) \
     $(OUTDIR)VDBDebuggerApplication.$(O) \
     $(OUTDIR)VDBEventLogApplication.$(O) \
     $(OUTDIR)VDBFramePresenter.$(O) \
@@ -91,6 +96,7 @@
     $(OUTDIR)VDBThreadPresenter.$(O) \
     $(OUTDIR)VDBVariablePresenter.$(O) \
     $(OUTDIR)VDBAbstractTreeApplication.$(O) \
+    $(OUTDIR)VDBBreakpointListApplication.$(O) \
     $(OUTDIR)VDBDebuggerConsoleApplication.$(O) \
     $(OUTDIR)VDBInferiorConsoleApplication.$(O) \
     $(OUTDIR)VDBTabbingContainer.$(O) \
--- a/VDBAbstractApplication.st	Wed Jul 12 16:28:50 2017 +0200
+++ b/VDBAbstractApplication.st	Tue Jul 11 09:07:35 2017 +0200
@@ -13,9 +13,16 @@
 !VDBAbstractApplication class methodsFor:'accessing'!
 
 windowTitle
+    | m |
+
+    m := self class lookupMethodFor: #windowSpec.
+    m mclass theNonMetaclass isAbstract ifTrue:[ 
+        self subclassResponsibility: 'Override #windowTitle in concrete classes'.
+    ].
     ^ ((self windowSpec at: 5) at: 3)
 
     "Created: / 01-06-2017 / 12:13:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-07-2017 / 16:36:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBAbstractApplication class methodsFor:'interface opening'!
@@ -162,6 +169,18 @@
     "Created: / 06-06-2014 / 22:13:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!VDBAbstractApplication methodsFor:'hooks'!
+
+postBuildWith:aBuilder
+    super postBuildWith: aBuilder.  
+    (aBuilder window respondsTo: #labelChannel:) ifTrue:[
+        aBuilder window labelChannel: self titleHolder.
+    ].
+
+    "Created: / 11-07-2017 / 16:33:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-07-2017 / 19:37:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !VDBAbstractApplication methodsFor:'initialization & release'!
 
 subscribe   
--- a/VDBAbstractConsoleApplication.st	Wed Jul 12 16:28:50 2017 +0200
+++ b/VDBAbstractConsoleApplication.st	Tue Jul 11 09:07:35 2017 +0200
@@ -9,6 +9,7 @@
 	category:'VDB-UI-Console'
 !
 
+
 !VDBAbstractConsoleApplication class methodsFor:'interface specs'!
 
 windowSpec
@@ -139,3 +140,10 @@
     "Created: / 09-06-2014 / 10:09:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!VDBAbstractConsoleApplication class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/VDBAbstractListApplication.st	Wed Jul 12 16:28:50 2017 +0200
+++ b/VDBAbstractListApplication.st	Tue Jul 11 09:07:35 2017 +0200
@@ -15,6 +15,55 @@
     ^ #()
 
     "Created: / 02-06-2017 / 07:26:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+windowSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:VDBAbstractListApplication andSelector:#windowSpec
+     VDBAbstractListApplication new openInterface:#windowSpec
+     VDBAbstractListApplication open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: windowSpec
+       window: 
+      (WindowSpec
+         label: 'VDBAbstractListApplication'
+         name: 'VDBAbstractListApplication'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 300 300)
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (SelectionInListModelViewSpec
+             name: 'SelectionInListModelView1'
+             layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+             model: internalSelectionHolder
+             menu: contextMenu
+             hasHorizontalScrollBar: true
+             hasVerticalScrollBar: true
+             listModel: internalListHolder
+             useIndex: false
+             highlightMode: line
+             doubleClickSelector: doDoubleClick
+             postBuildCallback: postBuildInternalListView:
+           )
+          )
+        
+       )
+     )
+
+    "Modified: / 11-07-2017 / 15:19:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !VDBAbstractListApplication class methodsFor:'menu specs'!
@@ -88,6 +137,25 @@
       )
 ! !
 
+!VDBAbstractListApplication class methodsFor:'plugIn spec'!
+
+aspectSelectors
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this. If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "Return a description of exported aspects;
+     these can be connected to aspects of an embedding application
+     (if this app is embedded in a subCanvas)."
+
+    ^ #(
+        #debuggerHolder
+      ).
+
+! !
+
 !VDBAbstractListApplication class methodsFor:'queries'!
 
 isAbstract
@@ -212,9 +280,10 @@
         selection isThreadPresenter ifTrue: [ selection thread inspect ].
         selection isFramePresenter ifTrue: [ selection frame inspect ].    
         selection isVariablePresenter ifTrue: [ selection variable inspect ].    
+        selection isBreakpointPresenter ifTrue: [ selection breakpoint inspect ].    
     ].
 
-    "Modified: / 02-06-2017 / 00:05:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-07-2017 / 11:49:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 doInspectPresenter
@@ -231,3 +300,11 @@
     "Modified: / 12-06-2017 / 12:00:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!VDBAbstractListApplication methodsFor:'queries'!
+
+hasSelection
+    ^ self internalSelectionHolder value notEmptyOrNil
+
+    "Modified: / 22-09-2014 / 01:13:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VDBBreakpointApplication.st	Tue Jul 11 09:07:35 2017 +0200
@@ -0,0 +1,163 @@
+"{ Package: 'jv:vdb' }"
+
+"{ NameSpace: Smalltalk }"
+
+VDBAbstractApplication subclass:#VDBBreakpointApplication
+	instanceVariableNames:'breakpointHolder enabledHolder'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'VDB-UI-Others'
+!
+
+
+!VDBBreakpointApplication class methodsFor:'interface specs'!
+
+windowSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:VDBBreakpointApplication andSelector:#windowSpec
+     VDBBreakpointApplication new openInterface:#windowSpec
+     VDBBreakpointApplication open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: windowSpec
+       window: 
+      (WindowSpec
+         label: 'Breakpoint'
+         name: 'Breakpoint'
+         labelChannel: titleHolder
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 300 300)
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (VerticalPanelViewSpec
+             name: 'Controls'
+             layout: (LayoutFrame 5 0 5 0 -5 1 -5 1)
+             horizontalLayout: fit
+             verticalLayout: topSpaceFit
+             horizontalSpace: 3
+             verticalSpace: 3
+             component: 
+            (SpecCollection
+               collection: (
+                (LabelSpec
+                   label: 'Condition'
+                   name: 'ConditionLabel'
+                   translateLabel: true
+                   adjust: left
+                   enableDisableColorChannel: enabledHolder
+                   useDefaultExtent: true
+                 )
+                (ComboBoxSpec
+                   name: 'Condition'
+                   enableChannel: enabledHolder
+                   model: breakpointConditionHolder
+                   acceptOnPointerLeave: false
+                   useDefaultExtent: true
+                 )
+                (LabelSpec
+                   label: 'Script'
+                   name: 'ScriptLabel'
+                   translateLabel: true
+                   adjust: left
+                   enableDisableColorChannel: enabledHolder
+                   useDefaultExtent: true
+                 )
+                (TextEditorSpec
+                   name: 'TextEditor1'
+                   enableChannel: enabledHolder
+                   model: breakpointScriptHolder
+                   hasHorizontalScrollBar: true
+                   hasVerticalScrollBar: true
+                   hasKeyboardFocusInitially: false
+                   extent: (Point 290 198)
+                   useDynamicPreferredHeight: true
+                 )
+                )
+              
+             )
+           )
+          )
+        
+       )
+     )
+! !
+
+!VDBBreakpointApplication class methodsFor:'plugIn spec'!
+
+aspectSelectors
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this. If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "Return a description of exported aspects;
+     these can be connected to aspects of an embedding application
+     (if this app is embedded in a subCanvas)."
+
+    ^ #(
+        #breakpointHolder
+        #debuggerHolder
+      ).
+
+! !
+
+!VDBBreakpointApplication methodsFor:'aspects'!
+
+breakpointConditionHolder
+    ^ (AspectAdaptor forAspect: #condition) subjectChannel: self breakpointHolder
+
+    "Created: / 12-07-2017 / 11:06:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+breakpointHolder
+    "return/create the 'breakpointHolder' value holder (automatically generated)"
+
+    breakpointHolder isNil ifTrue:[
+        breakpointHolder := ValueHolder new.
+    ].
+    ^ breakpointHolder
+!
+
+breakpointHolder:aValueModel
+    "set the 'breakpointHolder' value holder (automatically generated)"
+
+    breakpointHolder := aValueModel.
+!
+
+breakpointScriptHolder
+    ^ (AspectAdaptor forAspect: #script) subjectChannel: self breakpointHolder
+
+    "Created: / 12-07-2017 / 11:07:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+enabledHolder
+    "return/create the 'breakpointHolder' value holder (automatically generated)"
+
+    enabledHolder isNil ifTrue:[
+        enabledHolder := (AspectAdaptor forAspect: #notNil) subjectChannel: self breakpointHolder
+    ].
+    ^ enabledHolder
+
+    "Created: / 14-07-2017 / 10:29:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBBreakpointApplication class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VDBBreakpointListApplication.st	Tue Jul 11 09:07:35 2017 +0200
@@ -0,0 +1,217 @@
+"{ Package: 'jv:vdb' }"
+
+"{ NameSpace: Smalltalk }"
+
+VDBAbstractListApplication subclass:#VDBBreakpointListApplication
+	instanceVariableNames:'selectedBreakpointHolder'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'VDB-UI-Others'
+!
+
+
+!VDBBreakpointListApplication class methodsFor:'accessing'!
+
+windowTitle
+    ^ 'Breakpoints'
+
+    "Created: / 11-07-2017 / 16:37:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBBreakpointListApplication class methodsFor:'interface specs'!
+
+windowSpec
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this!! If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "
+     UIPainter new openOnClass:VDBBreakpointListApplication andSelector:#windowSpec
+     VDBBreakpointListApplication new openInterface:#windowSpec
+     VDBBreakpointListApplication open
+    "
+
+    <resource: #canvas>
+
+    ^ 
+    #(FullSpec
+       name: windowSpec
+       window: 
+      (WindowSpec
+         label: 'VDBAbstractListApplication'
+         name: 'VDBAbstractListApplication'
+         min: (Point 10 10)
+         bounds: (Rectangle 0 0 300 577)
+       )
+       component: 
+      (SpecCollection
+         collection: (
+          (VariableVerticalPanelSpec
+             name: 'VariableVerticalPanel1'
+             layout: (LayoutFrame 0 0 0 0 0 1 0 1)
+             showHandle: true
+             snapMode: both
+             handlePosition: left
+             component: 
+            (SpecCollection
+               collection: (
+                (SelectionInListModelViewSpec
+                   name: 'SelectionInListModelView1'
+                   model: internalSelectionHolder
+                   menu: contextMenu
+                   hasHorizontalScrollBar: true
+                   hasVerticalScrollBar: true
+                   listModel: internalListHolder
+                   useIndex: false
+                   highlightMode: line
+                   doubleClickSelector: doDoubleClick
+                   postBuildCallback: postBuildInternalListView:
+                 )
+                (SubCanvasSpec
+                   name: 'BreakpointCanvas'
+                   hasHorizontalScrollBar: false
+                   hasVerticalScrollBar: false
+                   majorKey: VDBBreakpointApplication
+                   subAspectHolders: 
+                  (Array
+                     
+                    (SubChannelInfoSpec
+                       subAspect: breakpointHolder
+                       aspect: selectedBreakpointHolder
+                     ) 
+                    (SubChannelInfoSpec
+                       subAspect: debuggerHolder
+                       aspect: debuggerHolder
+                     )
+                   )
+                   createNewApplication: true
+                   createNewBuilder: false
+                 )
+                )
+              
+             )
+             handles: (Any 0.5 1.0)
+           )
+          )
+        
+       )
+     )
+
+    "Modified (format): / 14-07-2017 / 10:28:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBBreakpointListApplication class methodsFor:'plugIn spec'!
+
+aspectSelectors
+    "This resource specification was automatically generated
+     by the UIPainter of ST/X."
+
+    "Do not manually edit this. If it is corrupted,
+     the UIPainter may not be able to read the specification."
+
+    "Return a description of exported aspects;
+     these can be connected to aspects of an embedding application
+     (if this app is embedded in a subCanvas)."
+
+    ^ #(
+        #debuggerHolder
+      ).
+
+! !
+
+!VDBBreakpointListApplication class methodsFor:'startup-web applications'!
+
+initialPageSpec
+    "this is only required for web-applications"
+
+    ^ self shouldImplement
+!
+
+pageSpecs
+    "this is only required for web-applications"
+
+    ^ self shouldImplement
+! !
+
+!VDBBreakpointListApplication methodsFor:'aspects'!
+
+selectedBreakpointHolder
+    "return/create the 'selectedBreakpointHolder' value holder (automatically generated)"
+
+    selectedBreakpointHolder isNil ifTrue:[
+        selectedBreakpointHolder := ValueHolder new.
+    ].
+    ^ selectedBreakpointHolder
+!
+
+selectedBreakpointHolder:something
+    "set the 'selectedBreakpointHolder' value holder (automatically generated)"
+
+    selectedBreakpointHolder := something.
+! !
+
+!VDBBreakpointListApplication methodsFor:'change & update-delayed'!
+
+delayedUpdateInternalList
+    | oldBreakpointPs newBreakpointPs |
+
+    oldBreakpointPs := self internalListHolder value.
+    newBreakpointPs := debugger breakpoints collect:[ :e| VDBBreakpointPresenter new setBreakpoint: e ].
+    self internalListHolder value: newBreakpointPs.
+
+    "Modified: / 10-07-2017 / 13:37:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+delayedUpdateSelection
+    | breakpointP |
+
+    breakpointP := self internalSelectionHolder value.    
+    self selectedBreakpointHolder value: (breakpointP notNil ifTrue:[ breakpointP breakpoint ] ifFalse:[ nil ])
+
+    "Modified: / 10-07-2017 / 16:44:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (comment): / 12-07-2017 / 10:37:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBBreakpointListApplication methodsFor:'event handling'!
+
+onBreakpointCreatedEvent: aGDBBreakpointCreatedEvent
+    self delayedUpdateInternalList.
+
+    "Created: / 10-07-2017 / 17:59:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+onBreakpointDeletedEvent: aGDBBreakpointDeletedEvent
+    self delayedUpdateInternalList.
+
+    "Created: / 10-07-2017 / 17:59:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+onBreakpointModifiedEvent: aGDBBreakpointModifiedEvent
+    internalListView scrolledView invalidate.
+
+    "Created: / 10-07-2017 / 18:00:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 12-07-2017 / 11:34:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBBreakpointListApplication methodsFor:'initialization & release'!
+
+subscribe   
+    "Register for debugger events. To be overrided by subclasses"
+
+    debugger announcer  
+        when: GDBBreakpointCreatedEvent  send: #onBreakpointCreatedEvent:  to: self;
+        when: GDBBreakpointModifiedEvent send: #onBreakpointModifiedEvent: to: self;
+        when: GDBBreakpointDeletedEvent  send: #onBreakpointDeletedEvent:  to: self.
+
+    "Created: / 10-07-2017 / 17:59:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBBreakpointListApplication class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VDBBreakpointPresenter.st	Tue Jul 11 09:07:35 2017 +0200
@@ -0,0 +1,57 @@
+"{ Package: 'jv:vdb' }"
+
+"{ NameSpace: Smalltalk }"
+
+VDBModelPresenter subclass:#VDBBreakpointPresenter
+	instanceVariableNames:'breakpoint'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'VDB-Presentation'
+!
+
+!VDBBreakpointPresenter methodsFor:'accessing'!
+
+breakpoint
+    ^ breakpoint
+!
+
+label
+    ^ String streamContents:[ :aStream |
+        aStream nextPutAll:(breakpoint enabled ifTrue:[ 'e ' ] ifFalse:[ 'd ' ]).
+        breakpoint number printOn:aStream.
+        aStream nextPutAll:', '.
+        breakpoint func notNil ifTrue:[ 
+            aStream nextPutAll:'in '.
+            breakpoint func printOn:aStream.   
+            aStream nextPutAll:'(), '. 
+        ].
+        breakpoint file notNil ifTrue:[
+            breakpoint file printOn:aStream.
+            aStream nextPut:$:.
+            breakpoint line printOn:aStream.
+        ] ifFalse:[ 
+            aStream nextPutAll:'at '.
+            breakpoint addr printOn: aStream.
+        ].                                                  
+    ].
+
+    "Created: / 10-07-2017 / 13:30:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 11-07-2017 / 12:13:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBBreakpointPresenter methodsFor:'initialization'!
+
+setBreakpoint: aGDBBreakpoint
+    breakpoint := aGDBBreakpoint
+
+    "Created: / 10-07-2017 / 13:29:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBBreakpointPresenter methodsFor:'testing'!
+
+isBreakpointPresenter
+    ^ true
+
+    "Created: / 11-07-2017 / 11:50:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/VDBDebuggerApplication.st	Wed Jul 12 16:28:50 2017 +0200
+++ b/VDBDebuggerApplication.st	Tue Jul 11 09:07:35 2017 +0200
@@ -419,6 +419,11 @@
                   argument: VDBFrameApplication
                 )
                (MenuItem
+                  label: 'Breakpoints'
+                  itemValue: doViewOpenClass:
+                  argument: VDBBreakpointListApplication
+                )
+               (MenuItem
                   label: '-'
                 )
                (MenuItem
--- a/VDBFrameApplication.st	Wed Jul 12 16:28:50 2017 +0200
+++ b/VDBFrameApplication.st	Tue Jul 11 09:07:35 2017 +0200
@@ -9,6 +9,14 @@
 	category:'VDB-UI-Others'
 !
 
+!VDBFrameApplication class methodsFor:'accessing'!
+
+windowTitle
+    ^ 'Variables'
+
+    "Created: / 11-07-2017 / 16:37:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !VDBFrameApplication class methodsFor:'interface specs'!
 
 columnsSpec
--- a/VDBModelPresenter.st	Wed Jul 12 16:28:50 2017 +0200
+++ b/VDBModelPresenter.st	Tue Jul 11 09:07:35 2017 +0200
@@ -44,6 +44,12 @@
 
 !VDBModelPresenter methodsFor:'testing'!
 
+isBreakpointPresenter
+    ^ false
+
+    "Created: / 11-07-2017 / 11:50:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 isFramePresenter
     ^ false
 
--- a/VDBStackApplication.st	Wed Jul 12 16:28:50 2017 +0200
+++ b/VDBStackApplication.st	Tue Jul 11 09:07:35 2017 +0200
@@ -11,6 +11,14 @@
 !
 
 
+!VDBStackApplication class methodsFor:'accessing'!
+
+windowTitle
+    ^ 'Backtrace'
+
+    "Created: / 11-07-2017 / 16:37:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !VDBStackApplication class methodsFor:'plugIn spec'!
 
 aspectSelectors
@@ -163,14 +171,21 @@
 !
 
 updateInternalSelectionAfterThreadStopped: thread
-    | threadP frameP |
-
-    threadP := self internalListHolder value root 
-                    recursiveDetect:[ :e | e isThreadPresenter and:[ e thread == thread ] ].
-    frameP := threadP children first.
-    self internalSelectionHolder value: frameP
+    "/ It may happen that by te time we get here the thread is running
+    "/ again, so care for this.
+    thread isStopped ifTrue:[
+        | threadP framePs frameP |
+        threadP := self internalListHolder value root 
+                        recursiveDetect:[ :e | e isThreadPresenter and:[ e thread == thread ] ].
+        framePs := threadP children.
+        framePs notEmpty ifTrue:[
+            frameP := threadP children first.
+            self internalSelectionHolder value: frameP
+        ].
+    ].
 
     "Created: / 22-09-2014 / 23:21:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 06-07-2017 / 08:56:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 updateSelection
@@ -311,14 +326,6 @@
     "Modified: / 02-03-2015 / 06:42:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
-!VDBStackApplication methodsFor:'queries'!
-
-hasSelection
-    ^ self internalSelectionHolder value notEmptyOrNil
-
-    "Modified: / 22-09-2014 / 01:13:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-! !
-
 !VDBStackApplication class methodsFor:'documentation'!
 
 version_HG
--- a/VDBVariablePresenter.st	Wed Jul 12 16:28:50 2017 +0200
+++ b/VDBVariablePresenter.st	Tue Jul 11 09:07:35 2017 +0200
@@ -9,6 +9,7 @@
 	category:'VDB-Presentation'
 !
 
+
 !VDBVariablePresenter methodsFor:'accessing'!
 
 label
@@ -50,3 +51,10 @@
     "Created: / 02-06-2017 / 00:05:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!VDBVariablePresenter class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/abbrev.stc	Wed Jul 12 16:28:50 2017 +0200
+++ b/abbrev.stc	Tue Jul 11 09:07:35 2017 +0200
@@ -8,6 +8,8 @@
 VDBAbstractConsoleApplication VDBAbstractConsoleApplication jv:vdb 'VDB-UI-Console' 2
 VDBAbstractContainer VDBAbstractContainer jv:vdb 'VDB-UI-Abstract' 2
 VDBAbstractListApplication VDBAbstractListApplication jv:vdb 'VDB-UI-Abstract' 2
+VDBBreakpointApplication VDBBreakpointApplication jv:vdb 'VDB-UI-Others' 2
+VDBBreakpointPresenter VDBBreakpointPresenter jv:vdb 'VDB-Presentation' 0
 VDBDebuggerApplication VDBDebuggerApplication jv:vdb 'VDB-UI' 2
 VDBEventLogApplication VDBEventLogApplication jv:vdb 'VDB-UI-Events' 2
 VDBFramePresenter VDBFramePresenter jv:vdb 'VDB-Presentation' 0
@@ -16,6 +18,7 @@
 VDBThreadPresenter VDBThreadPresenter jv:vdb 'VDB-Presentation' 0
 VDBVariablePresenter VDBVariablePresenter jv:vdb 'VDB-Presentation' 0
 VDBAbstractTreeApplication VDBAbstractTreeApplication jv:vdb 'VDB-UI-Abstract' 2
+VDBBreakpointListApplication VDBBreakpointListApplication jv:vdb 'VDB-UI-Others' 2
 VDBDebuggerConsoleApplication VDBDebuggerConsoleApplication jv:vdb 'VDB-UI-Console' 2
 VDBInferiorConsoleApplication VDBInferiorConsoleApplication jv:vdb 'VDB-UI-Console' 2
 VDBTabbingContainer VDBTabbingContainer jv:vdb 'VDB-UI-Containers' 2
--- a/application/Make.proto	Wed Jul 12 16:28:50 2017 +0200
+++ b/application/Make.proto	Tue Jul 11 09:07:35 2017 +0200
@@ -23,7 +23,7 @@
 NOAUTOLOAD=1
 NOSUBAUTOLOAD=1
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)/jv/libgdbs -I$(INCLUDE_TOP)/jv/vdb -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic2
+LOCALINCLUDES= -I$(INCLUDE_TOP)/jv/libgdbs -I$(INCLUDE_TOP)/jv/vdb -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libbasic2 -I$(INCLUDE_TOP)/stx/libtool
 LOCALDEFINES=
 GLOBALDEFINES=
 MAIN_DEFINES=-DIGNORE_IMAGE -DNO_DISPLAY
@@ -68,13 +68,12 @@
  libstx_libview \
  libstx_libui \
  libstx_libview2 \
- libstx_goodies_sunit \
  libstx_libwidg \
  libstx_goodies_magritte \
  libstx_libhtml \
  libstx_libwidg2 \
+ libstx_libtool \
  libjv_libgdbs \
- libstx_libtool \
  libstx_libtool2 \
  libjv_vdb \
 
@@ -88,13 +87,12 @@
  $(TOP)/libview/libstx_libview$(O_EXT) \
  $(TOP)/libui/libstx_libui$(O_EXT) \
  $(TOP)/libview2/libstx_libview2$(O_EXT) \
- $(TOP)/goodies/sunit/libstx_goodies_sunit$(O_EXT) \
  $(TOP)/libwidg/libstx_libwidg$(O_EXT) \
  $(TOP)/goodies/magritte/libstx_goodies_magritte$(O_EXT) \
  $(TOP)/libhtml/libstx_libhtml$(O_EXT) \
  $(TOP)/libwidg2/libstx_libwidg2$(O_EXT) \
+ $(TOP)/libtool/libstx_libtool$(O_EXT) \
  ../../libgdbs/libjv_libgdbs$(O_EXT) \
- $(TOP)/libtool/libstx_libtool$(O_EXT) \
  $(TOP)/libtool2/libstx_libtool2$(O_EXT) \
  ..//libjv_vdb$(O_EXT) \
 
@@ -108,13 +106,12 @@
  libstx_libview$(O_EXT) \
  libstx_libui$(O_EXT) \
  libstx_libview2$(O_EXT) \
- libstx_goodies_sunit$(O_EXT) \
  libstx_libwidg$(O_EXT) \
  libstx_goodies_magritte$(O_EXT) \
  libstx_libhtml$(O_EXT) \
  libstx_libwidg2$(O_EXT) \
+ libstx_libtool$(O_EXT) \
  libjv_libgdbs$(O_EXT) \
- libstx_libtool$(O_EXT) \
  libstx_libtool2$(O_EXT) \
  libjv_vdb$(O_EXT) \
 
@@ -418,19 +415,6 @@
 $(TOP)/libview2/makefile: $(TOP)/libview2/Make.proto
 	$(TOP)/rules/stmkmf --cd $(TOP)/libview2
 
-libstx_goodies_sunit.so: $(TOP)/goodies/sunit/libstx_goodies_sunit.so
-	ln -sf $(TOP)/goodies/sunit/libstx_goodies_sunit.so .
-
-$(TOP)/goodies/sunit/libstx_goodies_sunit.so: $(TOP)/goodies/sunit/makefile $(FORCE)
-	@if [ -f "$(TOP)/goodies/sunit/.NOSOURCE" ]; then \
-	    echo "skip make in $(TOP)/goodies/sunit (no source)"; \
-	else \
-	    cd $(TOP)/goodies/sunit && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES) "; \
-	fi
-
-$(TOP)/goodies/sunit/makefile: $(TOP)/goodies/sunit/Make.proto
-	$(TOP)/rules/stmkmf --cd $(TOP)/goodies/sunit
-
 libstx_libwidg.so: $(TOP)/libwidg/libstx_libwidg.so
 	ln -sf $(TOP)/libwidg/libstx_libwidg.so .
 
@@ -483,6 +467,19 @@
 $(TOP)/libwidg2/makefile: $(TOP)/libwidg2/Make.proto
 	$(TOP)/rules/stmkmf --cd $(TOP)/libwidg2
 
+libstx_libtool.so: $(TOP)/libtool/libstx_libtool.so
+	ln -sf $(TOP)/libtool/libstx_libtool.so .
+
+$(TOP)/libtool/libstx_libtool.so: $(TOP)/libtool/makefile $(FORCE)
+	@if [ -f "$(TOP)/libtool/.NOSOURCE" ]; then \
+	    echo "skip make in $(TOP)/libtool (no source)"; \
+	else \
+	    cd $(TOP)/libtool && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES) "; \
+	fi
+
+$(TOP)/libtool/makefile: $(TOP)/libtool/Make.proto
+	$(TOP)/rules/stmkmf --cd $(TOP)/libtool
+
 libjv_libgdbs.so: ../../libgdbs/libjv_libgdbs.so
 	ln -sf ../../libgdbs/libjv_libgdbs.so .
 
@@ -496,19 +493,6 @@
 ../../libgdbs/makefile: ../../libgdbs/Make.proto
 	$(TOP)/rules/stmkmf --cd ../../libgdbs
 
-libstx_libtool.so: $(TOP)/libtool/libstx_libtool.so
-	ln -sf $(TOP)/libtool/libstx_libtool.so .
-
-$(TOP)/libtool/libstx_libtool.so: $(TOP)/libtool/makefile $(FORCE)
-	@if [ -f "$(TOP)/libtool/.NOSOURCE" ]; then \
-	    echo "skip make in $(TOP)/libtool (no source)"; \
-	else \
-	    cd $(TOP)/libtool && $(MAKE) "CFLAGS_LOCAL=$(GLOBALDEFINES) "; \
-	fi
-
-$(TOP)/libtool/makefile: $(TOP)/libtool/Make.proto
-	$(TOP)/rules/stmkmf --cd $(TOP)/libtool
-
 libstx_libtool2.so: $(TOP)/libtool2/libstx_libtool2.so
 	ln -sf $(TOP)/libtool2/libstx_libtool2.so .
 
--- a/application/bc.mak	Wed Jul 12 16:28:50 2017 +0200
+++ b/application/bc.mak	Tue Jul 11 09:07:35 2017 +0200
@@ -58,7 +58,7 @@
 LIBNAME=libjv_vdb_application
 MODULE_PATH=vdb\application
 STCOPT="+optinline"
-LOCALINCLUDES= -I$(INCLUDE_TOP)\jv\libgdbs -I$(INCLUDE_TOP)\jv\vdb -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic2
+LOCALINCLUDES= -I$(INCLUDE_TOP)\jv\libgdbs -I$(INCLUDE_TOP)\jv\vdb -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic2 -I$(INCLUDE_TOP)\stx\libtool
 LOCALDEFINES=
 GLOBALDEFINES=
 
@@ -95,13 +95,12 @@
  libstx_libview.dll \
  libstx_libui.dll \
  libstx_libview2.dll \
- libstx_goodies_sunit.dll \
  libstx_libwidg.dll \
  libstx_goodies_magritte.dll \
  libstx_libhtml.dll \
  libstx_libwidg2.dll \
+ libstx_libtool.dll \
  libjv_libgdbs.dll \
- libstx_libtool.dll \
  libstx_libtool2.dll \
  libjv_vdb.dll \
 
@@ -362,12 +361,6 @@
 ..\..\..\stx\libview2\$(OBJDIR)\libstx_libview2.dll: $(FORCE)
 	pushd ..\..\..\stx\libview2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 
-libstx_goodies_sunit.dll: ..\..\..\stx\goodies\sunit\$(OBJDIR)\libstx_goodies_sunit.dll
-	copy ..\..\..\stx\goodies\sunit\$(OBJDIR)\libstx_goodies_sunit.dll *.*
-
-..\..\..\stx\goodies\sunit\$(OBJDIR)\libstx_goodies_sunit.dll: $(FORCE)
-	pushd ..\..\..\stx\goodies\sunit & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
-
 libstx_libwidg.dll: ..\..\..\stx\libwidg\$(OBJDIR)\libstx_libwidg.dll
 	copy ..\..\..\stx\libwidg\$(OBJDIR)\libstx_libwidg.dll *.*
 
@@ -392,18 +385,18 @@
 ..\..\..\stx\libwidg2\$(OBJDIR)\libstx_libwidg2.dll: $(FORCE)
 	pushd ..\..\..\stx\libwidg2 & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 
+libstx_libtool.dll: ..\..\..\stx\libtool\$(OBJDIR)\libstx_libtool.dll
+	copy ..\..\..\stx\libtool\$(OBJDIR)\libstx_libtool.dll *.*
+
+..\..\..\stx\libtool\$(OBJDIR)\libstx_libtool.dll: $(FORCE)
+	pushd ..\..\..\stx\libtool & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+
 libjv_libgdbs.dll: ..\..\libgdbs\$(OBJDIR)\libjv_libgdbs.dll
 	copy ..\..\libgdbs\$(OBJDIR)\libjv_libgdbs.dll *.*
 
 ..\..\libgdbs\$(OBJDIR)\libjv_libgdbs.dll: $(FORCE)
 	pushd ..\..\libgdbs & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
 
-libstx_libtool.dll: ..\..\..\stx\libtool\$(OBJDIR)\libstx_libtool.dll
-	copy ..\..\..\stx\libtool\$(OBJDIR)\libstx_libtool.dll *.*
-
-..\..\..\stx\libtool\$(OBJDIR)\libstx_libtool.dll: $(FORCE)
-	pushd ..\..\..\stx\libtool & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
-
 libstx_libtool2.dll: ..\..\..\stx\libtool2\$(OBJDIR)\libstx_libtool2.dll
 	copy ..\..\..\stx\libtool2\$(OBJDIR)\libstx_libtool2.dll *.*
 
--- a/application/builder/baseline.rbspec	Wed Jul 12 16:28:50 2017 +0200
+++ b/application/builder/baseline.rbspec	Tue Jul 11 09:07:35 2017 +0200
@@ -23,13 +23,12 @@
   package "stx:libview"
   package "stx:libui"
   package "stx:libview2"
-  package "stx:goodies/sunit"
   package "stx:libwidg"
   package "stx:goodies/magritte"
   package "stx:libhtml"
   package "stx:libwidg2"
+  package "stx:libtool"
   package "jv:libgdbs"
-  package "stx:libtool"
   package "stx:libtool2"
   package "jv:vdb"
 
--- a/application/builder/package.deps.rake	Wed Jul 12 16:28:50 2017 +0200
+++ b/application/builder/package.deps.rake	Tue Jul 11 09:07:35 2017 +0200
@@ -15,9 +15,6 @@
 
 task "stx:goodies/refactoryBrowser/parser" => "stx:libbasic"
 
-task "stx:goodies/sunit" => "stx:libbasic"
-task "stx:goodies/sunit" => "stx:libview2"
-
 
 task "stx:libbasic2" => "stx:libbasic"
 
@@ -70,7 +67,6 @@
 task "jv:vdb/application" => "stx:goodies/announcements"
 task "jv:vdb/application" => "stx:goodies/magritte"
 task "jv:vdb/application" => "stx:goodies/refactoryBrowser/parser"
-task "jv:vdb/application" => "stx:goodies/sunit"
 task "jv:vdb/application" => "stx:libbasic"
 task "jv:vdb/application" => "stx:libbasic2"
 task "jv:vdb/application" => "stx:libbasic3"
--- a/application/jv_vdb_application.st	Wed Jul 12 16:28:50 2017 +0200
+++ b/application/jv_vdb_application.st	Tue Jul 11 09:07:35 2017 +0200
@@ -79,6 +79,7 @@
         #'jv:libgdbs'    "GDBDebugger - referenced by VDBStartup class>>main:"
         #'jv:vdb'    "VDBDebuggerApplication - referenced by VDBStartup class>>main:"
         #'stx:libbasic2'    "UUID - referenced by VDBStartup class>>applicationUUID"
+        #'stx:libtool'    "DebugView - referenced by VDBStartup class>>main:"
     )
 !
 
--- a/application/modules.stx	Wed Jul 12 16:28:50 2017 +0200
+++ b/application/modules.stx	Tue Jul 11 09:07:35 2017 +0200
@@ -24,13 +24,12 @@
 libstx_libview
 libstx_libui
 libstx_libview2
-libstx_goodies_sunit
 libstx_libwidg
 libstx_goodies_magritte
 libstx_libhtml
 libstx_libwidg2
+libstx_libtool
 libjv_libgdbs
-libstx_libtool
 libstx_libtool2
 libjv_vdb
 
--- a/bc.mak	Wed Jul 12 16:28:50 2017 +0200
+++ b/bc.mak	Tue Jul 11 09:07:35 2017 +0200
@@ -35,7 +35,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\jv\libgdbs -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic2 -I$(INCLUDE_TOP)\stx\libtool -I$(INCLUDE_TOP)\stx\libtool2 -I$(INCLUDE_TOP)\stx\libview -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libwidg2
+LOCALINCLUDES= -I$(INCLUDE_TOP)\jv\libgdbs -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libbasic2 -I$(INCLUDE_TOP)\stx\libtool -I$(INCLUDE_TOP)\stx\libtool2 -I$(INCLUDE_TOP)\stx\libview -I$(INCLUDE_TOP)\stx\libview2 -I$(INCLUDE_TOP)\stx\libwidg -I$(INCLUDE_TOP)\stx\libwidg2
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
@@ -80,6 +80,8 @@
 $(OUTDIR)VDBAbstractConsoleApplication.$(O) VDBAbstractConsoleApplication.$(C) VDBAbstractConsoleApplication.$(H): VDBAbstractConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractContainer.$(O) VDBAbstractContainer.$(C) VDBAbstractContainer.$(H): VDBAbstractContainer.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractListApplication.$(O) VDBAbstractListApplication.$(C) VDBAbstractListApplication.$(H): VDBAbstractListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBBreakpointApplication.$(O) VDBBreakpointApplication.$(C) VDBBreakpointApplication.$(H): VDBBreakpointApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBBreakpointPresenter.$(O) VDBBreakpointPresenter.$(C) VDBBreakpointPresenter.$(H): VDBBreakpointPresenter.st $(INCLUDE_TOP)\jv\vdb\VDBModelPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBDebuggerApplication.$(O) VDBDebuggerApplication.$(C) VDBDebuggerApplication.$(H): VDBDebuggerApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBEventLogApplication.$(O) VDBEventLogApplication.$(C) VDBEventLogApplication.$(H): VDBEventLogApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBFramePresenter.$(O) VDBFramePresenter.$(C) VDBFramePresenter.$(H): VDBFramePresenter.st $(INCLUDE_TOP)\jv\vdb\VDBModelPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
@@ -88,6 +90,7 @@
 $(OUTDIR)VDBThreadPresenter.$(O) VDBThreadPresenter.$(C) VDBThreadPresenter.$(H): VDBThreadPresenter.st $(INCLUDE_TOP)\jv\vdb\VDBModelPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBVariablePresenter.$(O) VDBVariablePresenter.$(C) VDBVariablePresenter.$(H): VDBVariablePresenter.st $(INCLUDE_TOP)\jv\vdb\VDBModelPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
 $(OUTDIR)VDBAbstractTreeApplication.$(O) VDBAbstractTreeApplication.$(C) VDBAbstractTreeApplication.$(H): VDBAbstractTreeApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBBreakpointListApplication.$(O) VDBBreakpointListApplication.$(C) VDBBreakpointListApplication.$(H): VDBBreakpointListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBDebuggerConsoleApplication.$(O) VDBDebuggerConsoleApplication.$(C) VDBDebuggerConsoleApplication.$(H): VDBDebuggerConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBInferiorConsoleApplication.$(O) VDBInferiorConsoleApplication.$(C) VDBInferiorConsoleApplication.$(H): VDBInferiorConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
 $(OUTDIR)VDBTabbingContainer.$(O) VDBTabbingContainer.$(C) VDBTabbingContainer.$(H): VDBTabbingContainer.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContainer.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
--- a/jv_vdb.st	Wed Jul 12 16:28:50 2017 +0200
+++ b/jv_vdb.st	Tue Jul 11 09:07:35 2017 +0200
@@ -33,7 +33,7 @@
     ^ #(
         #'stx:libbasic'    "LibraryDefinition - superclass of jv_vdb"
         #'stx:libview2'    "ApplicationModel - superclass of VDBAbstractApplication"
-        #'stx:libwidg2'    "AbstractHierarchicalItem - superclass of VDBFramePresenter"
+        #'stx:libwidg2'    "AbstractHierarchicalItem - superclass of VDBBreakpointPresenter"
     )
 !
 
@@ -49,11 +49,12 @@
      Please also take a look at the #mandatoryPreRequisites method"
 
     ^ #(
-        #'jv:libgdbs'    "GDBDebugger - referenced by VDBDebuggerApplication class>>open"
+        #'jv:libgdbs'    "GDBBreakpointCreatedEvent - referenced by VDBBreakpointListApplication>>subscribe"
         #'stx:libbasic2'    "List - referenced by VDBAbstractContainer>>initialize"
-        #'stx:libtool'    "SmalltalkCodeGeneratorTool - referenced by VDBIconLibrary class>>loadAndCompileImagesFrom:categoryPrefix:"
+        #'stx:libtool'    "DebugView - referenced by VDBDebuggerApplication class>>initializeDefaultKeyboardMap"
         #'stx:libtool2'    "MenuEditor - referenced by VDBIconLibrary class>>initialize"
         #'stx:libview'    "Color - referenced by VDBAbstractConsoleApplication>>consoleView"
+        #'stx:libwidg'    "CodeView - referenced by VDBAbstractListApplication>>postBuildInternalListView:"
     )
 !
 
@@ -84,6 +85,8 @@
         VDBAbstractConsoleApplication
         VDBAbstractContainer
         VDBAbstractListApplication
+        VDBBreakpointApplication
+        VDBBreakpointPresenter
         VDBDebuggerApplication
         VDBEventLogApplication
         VDBFramePresenter
@@ -92,6 +95,7 @@
         VDBThreadPresenter
         VDBVariablePresenter
         VDBAbstractTreeApplication
+        VDBBreakpointListApplication
         VDBDebuggerConsoleApplication
         VDBInferiorConsoleApplication
         VDBTabbingContainer
--- a/libInit.cc	Wed Jul 12 16:28:50 2017 +0200
+++ b/libInit.cc	Tue Jul 11 09:07:35 2017 +0200
@@ -23,6 +23,8 @@
 extern void _VDBAbstractConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBAbstractContainer_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBAbstractListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBBreakpointApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBBreakpointPresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBDebuggerApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBEventLogApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBFramePresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -31,6 +33,7 @@
 extern void _VDBThreadPresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBVariablePresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBAbstractTreeApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBBreakpointListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBDebuggerConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBInferiorConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VDBTabbingContainer_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -57,6 +60,8 @@
     _VDBAbstractConsoleApplication_Init(pass,__pRT__,snd);
     _VDBAbstractContainer_Init(pass,__pRT__,snd);
     _VDBAbstractListApplication_Init(pass,__pRT__,snd);
+    _VDBBreakpointApplication_Init(pass,__pRT__,snd);
+    _VDBBreakpointPresenter_Init(pass,__pRT__,snd);
     _VDBDebuggerApplication_Init(pass,__pRT__,snd);
     _VDBEventLogApplication_Init(pass,__pRT__,snd);
     _VDBFramePresenter_Init(pass,__pRT__,snd);
@@ -65,6 +70,7 @@
     _VDBThreadPresenter_Init(pass,__pRT__,snd);
     _VDBVariablePresenter_Init(pass,__pRT__,snd);
     _VDBAbstractTreeApplication_Init(pass,__pRT__,snd);
+    _VDBBreakpointListApplication_Init(pass,__pRT__,snd);
     _VDBDebuggerConsoleApplication_Init(pass,__pRT__,snd);
     _VDBInferiorConsoleApplication_Init(pass,__pRT__,snd);
     _VDBTabbingContainer_Init(pass,__pRT__,snd);