Added toolbar and icons. Show all thread groups and threads in stack view.
--- a/VDBDebuggerApplication.st Sun Sep 21 23:46:10 2014 +0100
+++ b/VDBDebuggerApplication.st Mon Sep 22 09:57:54 2014 +0100
@@ -57,8 +57,17 @@
(Array
(SubChannelInfoSpec
- subAspect: selectionHolder
+ subAspect: selectedFrameHolder
aspect: selectedFrameHolder
+ )
+ (SubChannelInfoSpec
+ subAspect: selectedThreadGroupHolder
+ aspect: selectedThreadGroupHolder
+ )
+
+ (SubChannelInfoSpec
+ subAspect: selectedThreadHolder
+ aspect: selectedThreadHolder
)
)
createNewApplication: true
@@ -100,7 +109,7 @@
)
)
- handles: (Any 0.33333333333333337 0.66666666666666674 1.0)
+ handles: (Any 0.33333333333333343 0.66666666666666685 1.0)
)
)
@@ -235,46 +244,44 @@
#(Menu
(
(MenuItem
- enabled: canExecRunHolder
label: 'Run'
itemValue: doExecRun
labelImage: (ResourceRetriever VDBIconLibrary #'i14089_start_task' 'Run')
)
(MenuItem
- enabled: canExecResumeHolder
label: 'Resume'
itemValue: doExecResume
labelImage: (ResourceRetriever VDBIconLibrary #'resume_co' 'Resume')
)
(MenuItem
- enabled: canExecSuspendHolder
label: 'Suspend'
itemValue: doExecSuspend
labelImage: (ResourceRetriever VDBIconLibrary #'suspend_co' 'Suspend')
)
(MenuItem
- enabled: canExecTerminateHolder
label: 'Terminate'
itemValue: doExecTerminate
labelImage: (ResourceRetriever VDBIconLibrary #'terminate_co' 'Terminate')
)
(MenuItem
+ label: 'Restart'
+ itemValue: doExecRestart
+ labelImage: (ResourceRetriever VDBIconLibrary #'i18776_term_restart' 'Restart')
+ )
+ (MenuItem
label: '-'
)
(MenuItem
- enabled: canExecStepOverHolder
label: 'Step Over'
itemValue: doExecStepOver
labelImage: (ResourceRetriever VDBIconLibrary #'stepover_co' 'Step Over')
)
(MenuItem
- enabled: canExecStepIntoHolder
label: 'Step Into'
itemValue: doExecStepInto
labelImage: (ResourceRetriever VDBIconLibrary #'stepinto_co' 'Step Into')
)
(MenuItem
- enabled: canExecStepReturnHolder
label: 'Step Return'
itemValue: doExecStepReturn
labelImage: (ResourceRetriever VDBIconLibrary #'stepinto_co' 'Step Return')
@@ -283,8 +290,6 @@
nil
nil
)
-
- "Modified: / 21-09-2014 / 22:40:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
mainMenu
--- a/VDBFramePresenter.st Sun Sep 21 23:46:10 2014 +0100
+++ b/VDBFramePresenter.st Mon Sep 22 09:57:54 2014 +0100
@@ -7,12 +7,16 @@
category:'VDB-Presentation'
!
-!VDBFramePresenter methodsFor:'displaying'!
+!VDBFramePresenter methodsFor:'accessing'!
-displayString
+frame
+ ^ frame
+!
+
+label
^ frame displayString
- "Created: / 21-09-2014 / 23:31:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Created: / 22-09-2014 / 00:14:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBFramePresenter methodsFor:'initialization'!
@@ -36,3 +40,11 @@
"Created: / 21-09-2014 / 23:37:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!VDBFramePresenter methodsFor:'testing'!
+
+isFramePresenter
+ ^ true
+
+ "Created: / 21-09-2014 / 23:54:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/VDBModelPresenter.st Sun Sep 21 23:46:10 2014 +0100
+++ b/VDBModelPresenter.st Mon Sep 22 09:57:54 2014 +0100
@@ -17,3 +17,23 @@
"Created: / 21-09-2014 / 23:43:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!VDBModelPresenter methodsFor:'testing'!
+
+isFramePresenter
+ ^ false
+
+ "Created: / 21-09-2014 / 23:53:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isThreadGroupPresenter
+ ^ false
+
+ "Created: / 21-09-2014 / 23:54:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isThreadPresenter
+ ^ false
+
+ "Created: / 21-09-2014 / 23:54:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/VDBStackApplication.st Sun Sep 21 23:46:10 2014 +0100
+++ b/VDBStackApplication.st Mon Sep 22 09:57:54 2014 +0100
@@ -1,7 +1,8 @@
"{ Package: 'jv:vdb' }"
VDBAbstractApplication subclass:#VDBStackApplication
- instanceVariableNames:'selectionHolder internalListHolder internalSelectionHolder'
+ instanceVariableNames:'selectedThreadGroupHolder selectedThreadHolder
+ selectedFrameHolder internalListHolder internalSelectionHolder'
classVariableNames:''
poolDictionaries:''
category:'VDB-UI-Others'
@@ -42,18 +43,54 @@
name: 'Stack'
layout: (LayoutFrame 0 0 0 0 0 1 0 1)
model: internalSelectionHolder
+ menu: contextMenu
hasHorizontalScrollBar: true
hasVerticalScrollBar: true
listModel: internalListHolder
useIndex: false
highlightMode: line
+ useDefaultIcons: false
+ showRoot: false
)
)
)
)
+! !
- "Modified: / 20-09-2014 / 23:53:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!VDBStackApplication class methodsFor:'menu specs'!
+
+contextMenu
+ "This resource specification was automatically generated
+ by the MenuEditor of ST/X."
+
+ "Do not manually edit this!! If it is corrupted,
+ the MenuEditor may not be able to read the specification."
+
+
+ "
+ MenuEditor new openOnClass:VDBStackApplication andSelector:#contextMenu
+ (Menu new fromLiteralArrayEncoding:(VDBStackApplication contextMenu)) startUp
+ "
+
+ <resource: #menu>
+
+ ^
+ #(Menu
+ (
+ (MenuItem
+ enabled: hasSelection
+ label: 'Inspect Model'
+ itemValue: doInspectModel
+ )
+ (MenuItem
+ label: 'Inspect Presenter'
+ itemValue: doInspectPresenter
+ )
+ )
+ nil
+ nil
+ )
! !
!VDBStackApplication class methodsFor:'plugIn spec'!
@@ -71,39 +108,103 @@
^ #(
#debuggerHolder
- #selectionHolder
+ #selectedFrameHolder
+ #selectedThreadGroupHolder
+ #selectedThreadHolder
).
! !
!VDBStackApplication methodsFor:'aspects'!
-selectionHolder
+selectedFrameHolder
"return/create the 'selectionHolder' value holder (automatically generated)"
- selectionHolder isNil ifTrue:[
- selectionHolder := ValueHolder new.
- selectionHolder addDependent:self.
+ selectedFrameHolder isNil ifTrue:[
+ selectedFrameHolder := ValueHolder new.
+ selectedFrameHolder addDependent:self.
].
- ^ selectionHolder
+ ^ selectedFrameHolder
+
+ "Created: / 21-09-2014 / 23:51:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
-selectionHolder:something
+selectedFrameHolder:aValueModel
"set the 'selectionHolder' value holder (automatically generated)"
|oldValue newValue|
- selectionHolder notNil ifTrue:[
- oldValue := selectionHolder value.
- selectionHolder removeDependent:self.
+ selectedFrameHolder notNil ifTrue:[
+ oldValue := selectedFrameHolder value.
+ selectedFrameHolder removeDependent:self.
+ ].
+ selectedFrameHolder := aValueModel.
+ selectedFrameHolder notNil ifTrue:[
+ selectedFrameHolder addDependent:self.
+ ].
+ newValue := selectedFrameHolder value.
+ oldValue ~~ newValue ifTrue:[
+ self update:#value with:newValue from:selectedFrameHolder.
+ ].
+
+ "Created: / 21-09-2014 / 23:50:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+selectedThreadGroupHolder
+ "return/create the 'selectedThreadGroupHolder' value holder (automatically generated)"
+
+ selectedThreadGroupHolder isNil ifTrue:[
+ selectedThreadGroupHolder := ValueHolder new.
+ selectedThreadGroupHolder addDependent:self.
+ ].
+ ^ selectedThreadGroupHolder
+!
+
+selectedThreadGroupHolder:something
+ "set the 'selectedThreadGroupHolder' value holder (automatically generated)"
+
+ |oldValue newValue|
+
+ selectedThreadGroupHolder notNil ifTrue:[
+ oldValue := selectedThreadGroupHolder value.
+ selectedThreadGroupHolder removeDependent:self.
].
- selectionHolder := something.
- selectionHolder notNil ifTrue:[
- selectionHolder addDependent:self.
+ selectedThreadGroupHolder := something.
+ selectedThreadGroupHolder notNil ifTrue:[
+ selectedThreadGroupHolder addDependent:self.
+ ].
+ newValue := selectedThreadGroupHolder value.
+ oldValue ~~ newValue ifTrue:[
+ self update:#value with:newValue from:selectedThreadGroupHolder.
+ ].
+!
+
+selectedThreadHolder
+ "return/create the 'selectedThreadHolder' value holder (automatically generated)"
+
+ selectedThreadHolder isNil ifTrue:[
+ selectedThreadHolder := ValueHolder new.
+ selectedThreadHolder addDependent:self.
].
- newValue := selectionHolder value.
+ ^ selectedThreadHolder
+!
+
+selectedThreadHolder:something
+ "set the 'selectedThreadHolder' value holder (automatically generated)"
+
+ |oldValue newValue|
+
+ selectedThreadHolder notNil ifTrue:[
+ oldValue := selectedThreadHolder value.
+ selectedThreadHolder removeDependent:self.
+ ].
+ selectedThreadHolder := something.
+ selectedThreadHolder notNil ifTrue:[
+ selectedThreadHolder addDependent:self.
+ ].
+ newValue := selectedThreadHolder value.
oldValue ~~ newValue ifTrue:[
- self update:#value with:newValue from:selectionHolder.
+ self update:#value with:newValue from:selectedThreadHolder.
].
! !
@@ -139,7 +240,7 @@
"stub code automatically generated - please change as required"
- sender == selectionHolder ifTrue:[
+ sender == selectedFrameHolder ifTrue:[
self updateInternalSelection.
^ self.
].
@@ -153,75 +254,66 @@
!
updateInternalList
- | inferior thread root list |
+ | root list |
debugger isNil ifTrue:[
self internalListHolder root children:#().
^ self.
].
- debugger inferiors isEmptyOrNil ifTrue:[
- self internalListHolder root children:#().
- ^ self.
- ].
- debugger inferiors size > 1 ifTrue:[
- self error: 'Only one inferior supported'.
- ^ self.
- ].
- inferior := debugger inferiors anElement.
- inferior threads isEmptyOrNil ifTrue:[
- self internalListHolder root children:#().
- ^ self.
- ].
- debugger inferiors size > 1 ifTrue:[
- self error: 'Only one thread supported (yet)'.
- ^ self.
- ].
- thread := inferior threads anElement.
- thread isTerminated ifTrue:[
- self internalListHolder root children:#().
- ^ self.
- ].
root := self internalListHolder root.
- list := thread stack collect:[ :frame |
- HierarchicalItemWithLabelAndIconAndValue new
- label: frame printString;
- value: frame;
- parent: root.
- ].
- root children: list.
+ list := debugger inferiors collect:[ :inferior | VDBThreadGroupPresenter new setThreadGroup: inferior; parent: root ].
+ root children: list.
root expand.
- list notEmptyOrNil ifTrue:[
- self internalSelectionHolder value: list first.
+ root children size == 1 ifTrue:[
+ root children anElement expand.
+ root children anElement children size == 1 ifTrue:[
+ root children anElement children anElement expand.
+ ]
].
"Created: / 20-09-2014 / 23:05:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 21-09-2014 / 00:31:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 22-09-2014 / 00:04:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateInternalSelection
- | selection internalSelection |
-
- selection := self selectionHolder value.
- internalSelection := self internalListHolder value
- detect:[:e | e value == selection ] ifNone:[ nil ].
- self internalSelectionHolder
- value: internalSelection
- withoutNotifying: self.
+"/ | selection internalSelection |
+"/
+"/ selection := self selectionHolder value.
+"/ internalSelection := self internalListHolder value
+"/ detect:[:e | e value == selection ] ifNone:[ nil ].
+"/ self internalSelectionHolder
+"/ value: internalSelection
+"/ withoutNotifying: self.
"Created: / 20-09-2014 / 23:05:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 21-09-2014 / 23:52:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateSelection
- | internalSelection selection |
+ | internalSelection frame thread group |
internalSelection := self internalSelectionHolder value.
- selection := internalSelection value.
+ internalSelection notNil ifTrue:[
+ internalSelection isFramePresenter ifTrue:[
+ frame := internalSelection frame.
+ thread := frame thread.
+ group := thread group.
+ ] ifFalse:[
+ internalSelection isThreadPresenter ifTrue:[
+ thread := internalSelection thread.
+ group := thread group.
+ ] ifFalse:[
+ group := internalSelection threadGroup.
+ ]
+ ].
+ ].
- self selectionHolder
- value: selection
- withoutNotifying: self.
+ self selectedThreadGroupHolder value: group withoutNotifying: self.
+ self selectedThreadHolder value: thread withoutNotifying: self.
+ self selectedFrameHolder value: frame withoutNotifying: self.
"Created: / 20-09-2014 / 23:10:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 22-09-2014 / 00:17:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBStackApplication methodsFor:'change & update-dekayed'!
@@ -280,6 +372,35 @@
"Modified: / 18-09-2014 / 23:30:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!VDBStackApplication methodsFor:'menu actions'!
+
+doInspectModel
+ | selection |
+
+ selection := self internalSelectionHolder value.
+ selection notEmptyOrNil ifTrue:[
+ selection isThreadGroupPresenter ifTrue: [ selection threadGroup inspect ].
+ selection isThreadPresenter ifTrue: [ selection thread inspect ].
+ selection isFramePresenter ifTrue: [ selection frame inspect ].
+ ].
+
+ "Modified: / 22-09-2014 / 01:17:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+doInspectPresenter
+ self internalSelectionHolder value inspect
+
+ "Modified: / 22-09-2014 / 01:17:52 / 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/VDBThreadGroupPresenter.st Sun Sep 21 23:46:10 2014 +0100
+++ b/VDBThreadGroupPresenter.st Mon Sep 22 09:57:54 2014 +0100
@@ -7,12 +7,16 @@
category:'VDB-Presentation'
!
-!VDBThreadGroupPresenter methodsFor:'displaying'!
+!VDBThreadGroupPresenter methodsFor:'accessing'!
-displayString
+label
^ threadGroup displayString
- "Created: / 21-09-2014 / 23:31:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Created: / 22-09-2014 / 00:14:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+threadGroup
+ ^ threadGroup
! !
!VDBThreadGroupPresenter methodsFor:'initialization'!
@@ -36,3 +40,11 @@
"Created: / 21-09-2014 / 23:41:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!VDBThreadGroupPresenter methodsFor:'testing'!
+
+isThreadGroupPresenter
+ ^ true
+
+ "Created: / 21-09-2014 / 23:54:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/VDBThreadPresenter.st Sun Sep 21 23:46:10 2014 +0100
+++ b/VDBThreadPresenter.st Mon Sep 22 09:57:54 2014 +0100
@@ -7,12 +7,16 @@
category:'VDB-Presentation'
!
-!VDBThreadPresenter methodsFor:'displaying'!
+!VDBThreadPresenter methodsFor:'accessing'!
-displayString
+label
^ thread displayString
- "Created: / 21-09-2014 / 23:31:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Created: / 22-09-2014 / 00:14:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+thread
+ ^ thread
! !
!VDBThreadPresenter methodsFor:'initialization'!
@@ -31,8 +35,18 @@
a O(n*log n) or even O(n^2) behavior here.
*** to optimize: redefine by subClass"
- ^ thread frames collect:[ :f | VDBFramePresenter new setFrame: f; parent: self ]
+ thread isDead ifTrue:[ ^ #() ].
+ ^ thread stack collect:[ :f | VDBFramePresenter new setFrame: f; parent: self ]
"Created: / 21-09-2014 / 23:42:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 22-09-2014 / 00:54:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!VDBThreadPresenter methodsFor:'testing'!
+
+isThreadPresenter
+ ^ true
+
+ "Created: / 21-09-2014 / 23:54:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/application/applicationWinRC.rc Sun Sep 21 23:46:10 2014 +0100
+++ b/application/applicationWinRC.rc Mon Sep 22 09:57:54 2014 +0100
@@ -39,7 +39,7 @@
VALUE "LegalCopyright", "Copyring (C) 2014 Jan Vrany\0"
VALUE "ProductName", "Visual Debugger\0"
VALUE "ProductVersion", "6.2.4.0\0"
- VALUE "ProductDate", "Sun, 21 Sep 2014 22:44:47 GMT\0"
+ VALUE "ProductDate", "Mon, 22 Sep 2014 08:57:09 GMT\0"
END
END
--- a/tests/tests.rc Sun Sep 21 23:46:10 2014 +0100
+++ b/tests/tests.rc Mon Sep 22 09:57:54 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", "Sun, 21 Sep 2014 22:44:46 GMT\0"
+ VALUE "ProductDate", "Mon, 22 Sep 2014 08:57:07 GMT\0"
END
END
--- a/vdb.rc Sun Sep 21 23:46:10 2014 +0100
+++ b/vdb.rc Mon Sep 22 09:57:54 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", "Sun, 21 Sep 2014 22:44:44 GMT\0"
+ VALUE "ProductDate", "Mon, 22 Sep 2014 08:57:06 GMT\0"
END
END