--- a/Make.proto Mon Oct 01 12:11:59 2018 +0100
+++ b/Make.proto Mon Oct 01 20:56:03 2018 +0100
@@ -156,7 +156,6 @@
$(OUTDIR)VDBBreakpointPresenter.$(O) VDBBreakpointPresenter.$(C) VDBBreakpointPresenter.$(H): VDBBreakpointPresenter.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractPresenter.$(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/libgdbs/GDBStopReasons.$(H) $(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)VDBFrameApplication.$(O) VDBFrameApplication.$(C) VDBFrameApplication.$(H): VDBFrameApplication.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/VDBAbstractPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
$(OUTDIR)VDBInstructionPresenter.$(O) VDBInstructionPresenter.$(C) VDBInstructionPresenter.$(H): VDBInstructionPresenter.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
$(OUTDIR)VDBInstructionsAndSourcePresenter.$(O) VDBInstructionsAndSourcePresenter.$(C) VDBInstructionsAndSourcePresenter.$(H): VDBInstructionsAndSourcePresenter.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractPresenter.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libwidg2/AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)/stx/libwidg2/HierarchicalItem.$(H) $(STCHDR)
@@ -173,8 +172,10 @@
$(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) VDBUnixDebuggerConsoleApplication.$(C) VDBUnixDebuggerConsoleApplication.$(H): VDBUnixDebuggerConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
$(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) VDBUnixInferiorConsoleApplication.$(C) VDBUnixInferiorConsoleApplication.$(H): VDBUnixInferiorConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
$(OUTDIR)VDBUnixReplayServerConsoleApplication.$(O) VDBUnixReplayServerConsoleApplication.$(C) VDBUnixReplayServerConsoleApplication.$(H): VDBUnixReplayServerConsoleApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBFrameApplication.$(O) VDBFrameApplication.$(C) VDBFrameApplication.$(H): VDBFrameApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContainer.$(H) $(INCLUDE_TOP)/jv/vdb/VDBTabbingContainer.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
$(OUTDIR)VDBInstructionListApplication.$(O) VDBInstructionListApplication.$(C) VDBInstructionListApplication.$(H): VDBInstructionListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
$(OUTDIR)VDBRegisterListApplication.$(O) VDBRegisterListApplication.$(C) VDBRegisterListApplication.$(H): VDBRegisterListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
+$(OUTDIR)VDBSourceAndDisassemblyApplication.$(O) VDBSourceAndDisassemblyApplication.$(C) VDBSourceAndDisassemblyApplication.$(H): VDBSourceAndDisassemblyApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractContainer.$(H) $(INCLUDE_TOP)/jv/vdb/VDBTabbingContainer.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
$(OUTDIR)VDBStackApplication.$(O) VDBStackApplication.$(C) VDBStackApplication.$(H): VDBStackApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
$(OUTDIR)VDBVariableObjectListApplication.$(O) VDBVariableObjectListApplication.$(C) VDBVariableObjectListApplication.$(H): VDBVariableObjectListApplication.st $(INCLUDE_TOP)/jv/vdb/VDBAbstractApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractListApplication.$(H) $(INCLUDE_TOP)/jv/vdb/VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libview2/ApplicationModel.$(H) $(INCLUDE_TOP)/stx/libview2/Model.$(H) $(STCHDR)
$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/jv/libgdbs/GDBDebugger.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBDebuggerObject.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBObject.$(H) $(INCLUDE_TOP)/jv/libgdbs/GDBVariableObject.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/Dictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/IdentityDictionary.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/Set.$(H) $(INCLUDE_TOP)/stx/libbasic/UserPreferences.$(H) $(STCHDR)
--- a/Make.spec Mon Oct 01 12:11:59 2018 +0100
+++ b/Make.spec Mon Oct 01 20:56:03 2018 +0100
@@ -73,7 +73,6 @@
VDBBreakpointPresenter \
VDBDebuggerApplication \
VDBEventLogApplication \
- VDBFrameApplication \
VDBFramePresenter \
VDBInstructionPresenter \
VDBInstructionsAndSourcePresenter \
@@ -90,8 +89,10 @@
VDBUnixDebuggerConsoleApplication \
VDBUnixInferiorConsoleApplication \
VDBUnixReplayServerConsoleApplication \
+ VDBFrameApplication \
VDBInstructionListApplication \
VDBRegisterListApplication \
+ VDBSourceAndDisassemblyApplication \
VDBStackApplication \
VDBVariableObjectListApplication \
@@ -121,7 +122,6 @@
$(OUTDIR)VDBBreakpointPresenter.$(O) \
$(OUTDIR)VDBDebuggerApplication.$(O) \
$(OUTDIR)VDBEventLogApplication.$(O) \
- $(OUTDIR)VDBFrameApplication.$(O) \
$(OUTDIR)VDBFramePresenter.$(O) \
$(OUTDIR)VDBInstructionPresenter.$(O) \
$(OUTDIR)VDBInstructionsAndSourcePresenter.$(O) \
@@ -138,8 +138,10 @@
$(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) \
$(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) \
$(OUTDIR)VDBUnixReplayServerConsoleApplication.$(O) \
+ $(OUTDIR)VDBFrameApplication.$(O) \
$(OUTDIR)VDBInstructionListApplication.$(O) \
$(OUTDIR)VDBRegisterListApplication.$(O) \
+ $(OUTDIR)VDBSourceAndDisassemblyApplication.$(O) \
$(OUTDIR)VDBStackApplication.$(O) \
$(OUTDIR)VDBVariableObjectListApplication.$(O) \
$(OUTDIR)extensions.$(O) \
--- a/RRStartEvent.st Mon Oct 01 12:11:59 2018 +0100
+++ b/RRStartEvent.st Mon Oct 01 20:56:03 2018 +0100
@@ -30,3 +30,10 @@
"
! !
+!RRStartEvent class methodsFor:'documentation'!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
+! !
+
--- a/VDBAbstractApplication.st Mon Oct 01 12:11:59 2018 +0100
+++ b/VDBAbstractApplication.st Mon Oct 01 20:56:03 2018 +0100
@@ -256,17 +256,51 @@
!VDBAbstractApplication methodsFor:'change & update'!
enqueueDelayedUpdate: selector
- | w |
+ "Arrange for and update to be processed 'later' some time.
+ There's no time guarantee on when it'd be processed but
+ if if more updates are delayed, they're guaranteed to
+ process in order."
+
+ | w wg |
+
+ "/ Technicallly, this is done by pushing an user event onto
+ "/ and event queue and leting window's event dispatcher to
+ "/ trigger the update.
+ "/
+ "/ However, the complication comes when updated is enqueued
+ "/ for application which is is not fully initialized or it is
+ "/ not shown (such as in tab which is not visible). In that
+ "/ case there's no sensor (event queue) associated with
+ "/ application's (sub) window.
+ "/
+ "/ Since these updates re often equeued from an GDB event handler
+ "/ and since they often involve sending more commands to GDB, we
+ "/ really need them to be processed within an window event queue -
+ "/ sending commands from GDB event dispatch process is not permitted
+ "/ by GDB API.
+ "/
+ "/ Hence, if there's no sensor already set up for the window, use
+ "/ `WindowGroup activeGroup sensor`. In most cases that'd be the
+ "/ "right" one. If it's not, it should not harm.
+ "/
+ "/ If there's no active window group, then process the
+ "/ udate in special separate thread. This should be rare.
w := self window.
- w notNil ifTrue:[
- self window sensor pushUserEvent: selector for:self
- ] ifFalse:[
- self perform: selector
+ w notNil ifTrue:[
+ wg := w windowGroup.
+ ].
+ wg isNil ifTrue:[
+ wg := WindowGroup activeGroup
].
+ wg notNil ifTrue:[
+ wg sensor pushUserEvent: selector for:self
+ ] ifFalse:[
+ [ self perform: selector ] fork.
+ ]
"Created: / 17-01-2018 / 06:50:29 / jv"
- "Modified: / 03-02-2018 / 08:10:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified (format): / 03-10-2018 / 15:22:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
enqueueDelayedUpdate: selector with: argument
--- a/VDBAbstractListApplication.st Mon Oct 01 12:11:59 2018 +0100
+++ b/VDBAbstractListApplication.st Mon Oct 01 20:56:03 2018 +0100
@@ -366,12 +366,20 @@
!VDBAbstractListApplication methodsFor:'change & update-delayed'!
delayedInvalidateInternalList
- internalListView notNil ifTrue:[
- internalListView scrolledView invalidateRepairNow: true
+ | scrolledView |
+
+ "/ Since this is an delayed update, we should check whether
+ "/ the update still makes sense The window may be already
+ "/ closed or (worse) in the middle of closing. Sigh.
+ internalListView notNil ifTrue:[
+ scrolledView := internalListView scrolledView.
+ (scrolledView notNil and:[ scrolledView isVisible ]) ifTrue:[
+ scrolledView invalidateRepairNow: true
+ ]
].
"Created: / 06-02-2018 / 12:43:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 01-09-2018 / 22:24:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified (format): / 03-10-2018 / 15:25:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
delayedUpdateInternalList
@@ -560,10 +568,11 @@
internalCanSelect: index
| item |
- item := internalListHolder value at: index.
+ item := internalListHolder value at: index ifAbsent:[ ^ false ].
^self canSelect: item
"Created: / 09-04-2018 / 20:52:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 02-10-2018 / 10:22:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
internalList
--- a/VDBDebuggerApplication.st Mon Oct 01 12:11:59 2018 +0100
+++ b/VDBDebuggerApplication.st Mon Oct 01 20:56:03 2018 +0100
@@ -191,10 +191,10 @@
handles: (Any 0.5 1.0)
)
(SubCanvasSpec
- name: 'SourceCanvas'
+ name: 'SourcePane'
hasHorizontalScrollBar: false
hasVerticalScrollBar: false
- majorKey: VDBSourceApplication
+ majorKey: VDBSourceAndDisassemblyApplication
subAspectHolders:
(Array
@@ -233,7 +233,7 @@
)
)
- "Modified: / 06-06-2017 / 08:12:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-10-2018 / 12:48:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
layoutSingleSpec
@@ -757,7 +757,6 @@
#selectedThreadHolder
).
- "Modified: / 01-06-2017 / 23:32:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBDebuggerApplication methodsFor:'accessing'!
@@ -799,7 +798,7 @@
].
^ layoutSpecHolder
- "Modified: / 18-09-2014 / 23:35:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 02-10-2018 / 10:29:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
selectedFrameHolder
@@ -1224,10 +1223,11 @@
| application |
application := VDBInstructionListApplication new
+ debuggerHolder: self debuggerHolder;
frameHolder: self selectedFrameHolder.
self doOpenToolApplication: application.
- "Modified: / 28-09-2018 / 06:58:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 02-10-2018 / 10:15:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
doOpenToolRegisters
--- a/VDBFramePresenter.st Mon Oct 01 12:11:59 2018 +0100
+++ b/VDBFramePresenter.st Mon Oct 01 20:56:03 2018 +0100
@@ -116,10 +116,11 @@
doDisassemble
VDBInstructionListApplication new
title: (self class classResources string: '%1 (disassembly)' with: frame func ? '?');
+ debugger: frame debugger;
frame: frame;
open.
- "Modified: / 28-09-2018 / 06:55:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 02-10-2018 / 10:14:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBFramePresenter methodsFor:'menu-queries'!
@@ -152,3 +153,10 @@
"Created: / 21-09-2014 / 23:54:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!VDBFramePresenter class methodsFor:'documentation'!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
+! !
+
--- a/VDBInstructionListApplication.st Mon Oct 01 12:11:59 2018 +0100
+++ b/VDBInstructionListApplication.st Mon Oct 01 20:56:03 2018 +0100
@@ -365,6 +365,18 @@
"Created: / 26-06-2018 / 12:20:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+enqueueDelayedUpdateButtonEnablements
+ self enqueueDelayedUpdate: #delayedUpdateButtonEnablements
+
+ "Created: / 03-10-2018 / 12:12:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+enqueueDelayedUpdateInstructionList
+ self enqueueDelayedUpdate: #delayedUpdateInstructionList
+
+ "Created: / 01-10-2018 / 12:56:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
update:aspect with:param from:sender
"Invoked when an object that I depend upon sends a change notification."
@@ -373,7 +385,7 @@
^ self.
].
sender == frameHolder ifTrue:[
- self updateAfterFrameChanged.
+ self enqueueDelayedUpdateInstructionList.
^ self.
].
sender == selectedInstructionHolder ifTrue:[
@@ -381,24 +393,7 @@
].
super update:aspect with:param from:sender
- "Modified: / 06-08-2018 / 13:23:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-updateAfterFrameChanged
- | frame |
-
- frame := self frame.
- frame notNil ifTrue:[
- self debugger: self frame debugger.
- self instructionList: self frame disassemble.
- ] ifFalse:[
- self debugger: nil.
- self instructionList: #().
- ].
- self updateButtonEnablements.
-
- "Created: / 06-08-2018 / 13:24:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 28-09-2018 / 07:03:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-10-2018 / 12:56:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
updateAfterSelectedInstructionChanged
@@ -450,6 +445,20 @@
!VDBInstructionListApplication methodsFor:'change & update-delayed'!
+delayedInvalidateInternalList
+ | frame |
+
+ "/ First, force update of )cached) frames to get
+ "/ updated PC.
+ frame := self frame.
+ (frame notNil and:[frame thread isStopped]) ifTrue:[
+ frame thread stack
+ ].
+ super delayedInvalidateInternalList
+
+ "Created: / 03-10-2018 / 12:10:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
delayedUpdateBasicBlocks
| instructions |
@@ -462,6 +471,40 @@
"Modified: / 16-08-2018 / 11:33:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+delayedUpdateButtonEnablements
+ | frame thread threadIsStopped canReverse |
+
+ frame := self frameHolder value.
+ frame notNil ifTrue:[
+ thread := frame thread.
+ ].
+ threadIsStopped := thread notNil and:[ thread isStopped ].
+ canReverse := debugger notNil and:[ debugger hasFeature: 'reverse' ].
+
+ self canExecStepIntoInstructionHolder value: threadIsStopped.
+ self canExecStepOverInstructionHolder value: threadIsStopped.
+
+ self canExecBackIntoInstructionHolder value: threadIsStopped & canReverse.
+ self canExecBackOverInstructionHolder value: threadIsStopped & canReverse.
+
+ "Created: / 03-10-2018 / 12:12:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+delayedUpdateInstructionList
+ | frame |
+
+ frame := self frame.
+ (frame notNil and:[ frame hasSymbol ]) ifTrue:[
+ self instructionList: frame disassemble.
+ ] ifFalse:[
+ self instructionList: #().
+ ].
+ self updateButtonEnablements.
+
+ "Created: / 01-10-2018 / 12:55:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 02-10-2018 / 10:12:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
delayedUpdateInternalList
| root |
@@ -514,21 +557,20 @@
!
onRunningEvent: aGDBStoppedEvent
- self updateButtonEnablements
+ self enqueueDelayedUpdateButtonEnablements
"Created: / 21-09-2014 / 22:44:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 01-06-2017 / 23:18:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 03-10-2018 / 12:12:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
onStoppedEvent: aGDBStoppedEvent
self frame notNil ifTrue:[
- self frame thread stack. "/ to force update of (cached) frames.
- self enqueueDelayedInvalidateInternalList
+ self enqueueDelayedInvalidateInternalList.
+ self enqueueDelayedUpdateButtonEnablements.
].
- self updateButtonEnablements
"Created: / 06-08-2018 / 14:45:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 01-09-2018 / 22:39:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 03-10-2018 / 12:13:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!VDBInstructionListApplication methodsFor:'initialization & release'!
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/VDBSourceAndDisassemblyApplication.st Mon Oct 01 20:56:03 2018 +0100
@@ -0,0 +1,82 @@
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+"{ Package: 'jv:vdb' }"
+
+"{ NameSpace: Smalltalk }"
+
+VDBTabbingContainer subclass:#VDBSourceAndDisassemblyApplication
+ instanceVariableNames:'frameHolder'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'VDB-UI-Source'
+!
+
+!VDBSourceAndDisassemblyApplication class methodsFor:'documentation'!
+
+copyright
+"
+jv:vdb - Visual / VM Debugger
+Copyright (C) 2015-now Jan Vrany
+
+This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License'
+
+You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/
+"
+! !
+
+!VDBSourceAndDisassemblyApplication methodsFor:'aspects'!
+
+frameHolder
+ "return/create the 'frameHolder' value holder (automatically generated)"
+
+ frameHolder isNil ifTrue:[
+ frameHolder := ValueHolder new.
+ frameHolder addDependent:self.
+ ].
+ ^ frameHolder
+!
+
+frameHolder:aValueModel
+ "set the 'frameHolder' value holder (automatically generated)"
+
+ |oldValue newValue|
+
+ frameHolder notNil ifTrue:[
+ oldValue := frameHolder value.
+ frameHolder removeDependent:self.
+ ].
+ frameHolder := aValueModel.
+ components do:[:each | each application perform: #frameHolder: with: frameHolder ].
+ frameHolder notNil ifTrue:[
+ frameHolder addDependent:self.
+ ].
+ newValue := frameHolder value.
+ oldValue ~~ newValue ifTrue:[
+ self update:#value with:newValue from:frameHolder.
+ ].
+
+ "Modified: / 01-10-2018 / 13:09:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!VDBSourceAndDisassemblyApplication methodsFor:'initialization'!
+
+initialize
+ super initialize.
+ self addApplication: (VDBSourceApplication new
+ debuggerHolder: self debuggerHolder;
+ frameHolder: self frameHolder;
+ yourself).
+ self addApplication: (VDBInstructionListApplication new
+ debuggerHolder: self debuggerHolder;
+ frameHolder: self frameHolder;
+ yourself)
+
+ "Created: / 01-10-2018 / 12:45:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/VDBStackApplication.st Mon Oct 01 12:11:59 2018 +0100
+++ b/VDBStackApplication.st Mon Oct 01 20:56:03 2018 +0100
@@ -312,11 +312,11 @@
self selectedFrameHolder value notNil ifTrue:[
self internalSelectionHolder value: nil withoutNotifying: self.
].
- self delayedInvalidateInternalList
+ self enqueueDelayedInvalidateInternalList
"Created: / 30-09-2014 / 00:02:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 17-01-2018 / 06:59:11 / jv"
- "Modified: / 27-09-2018 / 21:30:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-10-2018 / 12:59:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
onStoppedEvent: event
--- a/abbrev.stc Mon Oct 01 12:11:59 2018 +0100
+++ b/abbrev.stc Mon Oct 01 20:56:03 2018 +0100
@@ -23,7 +23,6 @@
VDBBreakpointPresenter VDBBreakpointPresenter jv:vdb 'VDB-Presentation' 0
VDBDebuggerApplication VDBDebuggerApplication jv:vdb 'VDB-UI' 2
VDBEventLogApplication VDBEventLogApplication jv:vdb 'VDB-UI-Events' 2
-VDBFrameApplication VDBFrameApplication jv:vdb 'VDB-UI-Others' 2
VDBFramePresenter VDBFramePresenter jv:vdb 'VDB-Presentation' 0
VDBInstructionPresenter VDBInstructionPresenter jv:vdb 'VDB-Presentation' 0
VDBInstructionsAndSourcePresenter VDBInstructionsAndSourcePresenter jv:vdb 'VDB-Presentation' 0
@@ -40,7 +39,9 @@
VDBUnixDebuggerConsoleApplication VDBUnixDebuggerConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
VDBUnixInferiorConsoleApplication VDBUnixInferiorConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
VDBUnixReplayServerConsoleApplication VDBUnixReplayServerConsoleApplication jv:vdb 'VDB-UI-Console-Unix' 2
+VDBFrameApplication VDBFrameApplication jv:vdb 'VDB-UI-Others' 2
VDBInstructionListApplication VDBInstructionListApplication jv:vdb 'VDB-UI-Others' 2
VDBRegisterListApplication VDBRegisterListApplication jv:vdb 'VDB-UI-Others' 2
+VDBSourceAndDisassemblyApplication VDBSourceAndDisassemblyApplication jv:vdb 'VDB-UI-Source' 2
VDBStackApplication VDBStackApplication jv:vdb 'VDB-UI-Others' 2
VDBVariableObjectListApplication VDBVariableObjectListApplication jv:vdb 'VDB-UI-Others' 2
--- a/bc.mak Mon Oct 01 12:11:59 2018 +0100
+++ b/bc.mak Mon Oct 01 20:56:03 2018 +0100
@@ -103,7 +103,6 @@
$(OUTDIR)VDBBreakpointPresenter.$(O) VDBBreakpointPresenter.$(C) VDBBreakpointPresenter.$(H): VDBBreakpointPresenter.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractPresenter.$(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\libgdbs\GDBStopReasons.$(H) $(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)VDBFrameApplication.$(O) VDBFrameApplication.$(C) VDBFrameApplication.$(H): VDBFrameApplication.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\VDBAbstractPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
$(OUTDIR)VDBInstructionPresenter.$(O) VDBInstructionPresenter.$(C) VDBInstructionPresenter.$(H): VDBInstructionPresenter.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
$(OUTDIR)VDBInstructionsAndSourcePresenter.$(O) VDBInstructionsAndSourcePresenter.$(C) VDBInstructionsAndSourcePresenter.$(H): VDBInstructionsAndSourcePresenter.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractPresenter.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libwidg2\AbstractHierarchicalItem.$(H) $(INCLUDE_TOP)\stx\libwidg2\HierarchicalItem.$(H) $(STCHDR)
@@ -120,8 +119,10 @@
$(OUTDIR)VDBUnixDebuggerConsoleApplication.$(O) VDBUnixDebuggerConsoleApplication.$(C) VDBUnixDebuggerConsoleApplication.$(H): VDBUnixDebuggerConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
$(OUTDIR)VDBUnixInferiorConsoleApplication.$(O) VDBUnixInferiorConsoleApplication.$(C) VDBUnixInferiorConsoleApplication.$(H): VDBUnixInferiorConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
$(OUTDIR)VDBUnixReplayServerConsoleApplication.$(O) VDBUnixReplayServerConsoleApplication.$(C) VDBUnixReplayServerConsoleApplication.$(H): VDBUnixReplayServerConsoleApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractUnixConsoleApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBFrameApplication.$(O) VDBFrameApplication.$(C) VDBFrameApplication.$(H): VDBFrameApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContainer.$(H) $(INCLUDE_TOP)\jv\vdb\VDBTabbingContainer.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
$(OUTDIR)VDBInstructionListApplication.$(O) VDBInstructionListApplication.$(C) VDBInstructionListApplication.$(H): VDBInstructionListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
$(OUTDIR)VDBRegisterListApplication.$(O) VDBRegisterListApplication.$(C) VDBRegisterListApplication.$(H): VDBRegisterListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
+$(OUTDIR)VDBSourceAndDisassemblyApplication.$(O) VDBSourceAndDisassemblyApplication.$(C) VDBSourceAndDisassemblyApplication.$(H): VDBSourceAndDisassemblyApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractContainer.$(H) $(INCLUDE_TOP)\jv\vdb\VDBTabbingContainer.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
$(OUTDIR)VDBStackApplication.$(O) VDBStackApplication.$(C) VDBStackApplication.$(H): VDBStackApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
$(OUTDIR)VDBVariableObjectListApplication.$(O) VDBVariableObjectListApplication.$(C) VDBVariableObjectListApplication.$(H): VDBVariableObjectListApplication.st $(INCLUDE_TOP)\jv\vdb\VDBAbstractApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractListApplication.$(H) $(INCLUDE_TOP)\jv\vdb\VDBAbstractTreeApplication.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libview2\ApplicationModel.$(H) $(INCLUDE_TOP)\stx\libview2\Model.$(H) $(STCHDR)
$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\jv\libgdbs\GDBDebugger.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBDebuggerObject.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBObject.$(H) $(INCLUDE_TOP)\jv\libgdbs\GDBVariableObject.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\Dictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\IdentityDictionary.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Set.$(H) $(INCLUDE_TOP)\stx\libbasic\UserPreferences.$(H) $(STCHDR)
--- a/jv_vdb.st Mon Oct 01 12:11:59 2018 +0100
+++ b/jv_vdb.st Mon Oct 01 20:56:03 2018 +0100
@@ -122,7 +122,6 @@
VDBBreakpointPresenter
VDBDebuggerApplication
VDBEventLogApplication
- VDBFrameApplication
VDBFramePresenter
VDBInstructionPresenter
VDBInstructionsAndSourcePresenter
@@ -139,8 +138,10 @@
VDBUnixDebuggerConsoleApplication
VDBUnixInferiorConsoleApplication
VDBUnixReplayServerConsoleApplication
+ VDBFrameApplication
VDBInstructionListApplication
VDBRegisterListApplication
+ VDBSourceAndDisassemblyApplication
VDBStackApplication
VDBVariableObjectListApplication
)
--- a/libInit.cc Mon Oct 01 12:11:59 2018 +0100
+++ b/libInit.cc Mon Oct 01 20:56:03 2018 +0100
@@ -38,7 +38,6 @@
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 _VDBFrameApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _VDBFramePresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _VDBInstructionPresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _VDBInstructionsAndSourcePresenter_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -55,8 +54,10 @@
extern void _VDBUnixDebuggerConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _VDBUnixInferiorConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _VDBUnixReplayServerConsoleApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBFrameApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _VDBInstructionListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _VDBRegisterListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _VDBSourceAndDisassemblyApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _VDBStackApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
extern void _VDBVariableObjectListApplication_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
@@ -95,7 +96,6 @@
_VDBBreakpointPresenter_Init(pass,__pRT__,snd);
_VDBDebuggerApplication_Init(pass,__pRT__,snd);
_VDBEventLogApplication_Init(pass,__pRT__,snd);
- _VDBFrameApplication_Init(pass,__pRT__,snd);
_VDBFramePresenter_Init(pass,__pRT__,snd);
_VDBInstructionPresenter_Init(pass,__pRT__,snd);
_VDBInstructionsAndSourcePresenter_Init(pass,__pRT__,snd);
@@ -112,8 +112,10 @@
_VDBUnixDebuggerConsoleApplication_Init(pass,__pRT__,snd);
_VDBUnixInferiorConsoleApplication_Init(pass,__pRT__,snd);
_VDBUnixReplayServerConsoleApplication_Init(pass,__pRT__,snd);
+ _VDBFrameApplication_Init(pass,__pRT__,snd);
_VDBInstructionListApplication_Init(pass,__pRT__,snd);
_VDBRegisterListApplication_Init(pass,__pRT__,snd);
+ _VDBSourceAndDisassemblyApplication_Init(pass,__pRT__,snd);
_VDBStackApplication_Init(pass,__pRT__,snd);
_VDBVariableObjectListApplication_Init(pass,__pRT__,snd);
--- a/tests/VDBInstructionListApplicationTests.st Mon Oct 01 12:11:59 2018 +0100
+++ b/tests/VDBInstructionListApplicationTests.st Mon Oct 01 20:56:03 2018 +0100
@@ -32,12 +32,19 @@
!VDBInstructionListApplicationTests methodsFor:'tests'!
-test_01
+test_01a
| stack frameHolder |
debugger := GDBDebugger new.
self assert: debugger isConnected.
+ frameHolder := ValueHolder new.
+ application := VDBInstructionListApplication new.
+ application debuggerHolder: (ValueHolder with: debugger).
+ application frameHolder: frameHolder.
+ application open.
+
+
debugger executable: GDBDebuggeesResource current binaryFactorial1.
debugger send: 'b factorial'.
debugger send: 'r' andWaitFor: GDBStoppedEvent.
@@ -46,12 +53,56 @@
stack := debugger selectedInferior threads first stack.
self assert: stack size = 3.
- frameHolder := stack first asValue.
+ frameHolder value: stack first.
+
+ debugger send: 'stepi' andWaitFor: GDBStoppedEvent.
+ debugger send: 'next' andWaitFor: GDBStoppedEvent.
+ debugger send: 'd'.
+
+ frameHolder value: nil.
+
+ debugger send: 'c' andWaitFor: GDBThreadGroupExitedEvent.
+
+ "Created: / 03-10-2018 / 12:27:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 03-10-2018 / 15:19:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_01b
+ | stack frameHolder |
+
+ debugger := GDBDebugger new.
+ self assert: debugger isConnected.
+
+ frameHolder := ValueHolder new.
application := VDBInstructionListApplication new.
+ application debuggerHolder: (ValueHolder with: debugger).
application frameHolder: frameHolder.
- application open.
+ application allButOpen.
+
+
+ debugger executable: GDBDebuggeesResource current binaryFactorial1.
+ debugger send: 'b factorial'.
+ debugger send: 'r' andWaitFor: GDBStoppedEvent.
+ debugger send: 'c' andWaitFor: GDBStoppedEvent.
- "Created: / 28-09-2018 / 08:33:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 28-09-2018 / 10:05:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ stack := debugger selectedInferior threads first stack.
+ self assert: stack size = 3.
+
+ frameHolder value: stack first.
+
+ debugger send: 'stepi' andWaitFor: GDBStoppedEvent.
+ debugger send: 'next' andWaitFor: GDBStoppedEvent.
+ debugger send: 'd'.
+ debugger send: 'c' andWaitFor: GDBThreadGroupExitedEvent.
+
+ "Created: / 03-10-2018 / 12:27:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 03-10-2018 / 15:14:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!VDBInstructionListApplicationTests class methodsFor:'documentation'!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
+! !
+