GemTalk / JadeiteForPharo

IDE for GemStone Smalltalk application development in Pharo using Rowan code management
MIT License
0 stars 0 forks source link

get walkback in RowanServiceUpdater after setting breakpoint in a test method (browser has been closed) #74

Closed dalehenrich closed 7 months ago

dalehenrich commented 8 months ago

Cannot select any classes at this point in time ... JfD doesn't honor breakpoints. ScreenShot: image stack:

RowanServiceUpdater(Object)>>halt
[:ex | self halt] in RowanServiceUpdater>>updatesPerform:presenter:browser: in Block: [:ex | self halt]
FullBlockClosure(BlockClosure)>>cull:
Context>>evaluateSignal:
Context>>handleSignal:
SubscriptOutOfBounds(Exception)>>signal
SubscriptOutOfBounds class>>signalFor:lowerBound:upperBound:in:
SubscriptOutOfBounds class>>signalFor:lowerBound:upperBound:
SubscriptOutOfBounds class>>signalFor:
Array(Object)>>errorSubscriptBounds:
Array(Object)>>at:
[ :breakPoint |
        | range stepPointAssoc |
        stepPointAssoc := self methodListPresenter selectedItem stepPoints at: breakPoint. 
        range := self methodListPresenter selectedItem stepPointRangeFrom:
                     stepPointAssoc.
        self methodSourcePresenter addTextSegmentDecoration:
            ((SpTextPresenterDecorator new highlightColor: Color lightCyan)
                 interval: range) ] in JadeiteMethodListPresenter>>displayBreakpoints in Block: [ :breakPoint |...
OrderedCollection>>do:
JadeiteMethodListPresenter>>displayBreakpoints
JadeiteMethodListPresenter>>updateMethodSourceGlyphs
JadeiteMethodListPresenter>>updateSingleMethodSource
JadeiteMethodListPresenter>>updateMethodSource
RowanMethodServiceClient(RowanMethodService)>>methodUpdate:browser:
[:update |
            (self shouldApply: selector forSelector: update)
                ifTrue: 
                    [update
                        perform: selector
                        with: presenter
                        with: browser]] in [updates do: 
            [:update |
            (self shouldApply: selector forSelector: update)
                ifTrue: 
                    [update
                        perform: selector
                        with: presenter
                        with: browser]]] in RowanServiceUpdater>>updatesPerform:presenter:browser: in Block: [:update |...
OrderedCollection>>do:
[updates do: 
            [:update |
            (self shouldApply: selector forSelector: update)
                ifTrue: 
                    [update
                        perform: selector
                        with: presenter
                        with: browser]]] in RowanServiceUpdater>>updatesPerform:presenter:browser: in Block: [updates do: ...
FullBlockClosure(BlockClosure)>>on:do:
RowanServiceUpdater>>updatesPerform:presenter:browser:
JadeiteTablePresenter(SpPresenter)>>update:withSelector:browser:
WeakMessageSend>>value
[:each | each isValid ifTrue: [answer := each value]] in WeakActionSequence>>value in Block: [:each | each isValid ifTrue: [answer := each [..]
WeakActionSequence(SequenceableCollection)>>do:
WeakActionSequence>>value
RowanServiceUpdater(Object)>>triggerEvent:
RowanServiceUpdater>>trigger:
RowanServiceUpdater>>updatesReadyToApply
[updates removeAll: updates.
            updates addAll: aCollection.
            self updatesReadyToApply] in RowanServiceUpdater>>applyUpdatesFromReturnedServices: in Block: [updates removeAll: updates....
FullBlockClosure(BlockClosure)>>ensure:
RowanServiceUpdater>>applyUpdateWhile:
RowanServiceUpdater>>applyUpdatesFromReturnedServices:
[ :service |
        service prepareForReplication. 
        service executeInSession: session onCompletion: completionBlock.
        updateResult := self applyUpdatesFromReturnedServices:
                            service returnedServices ] in RowanServiceUpdater>>basicIssueCommand:session:onCompletion: in Block: [ :service |...
OrderedCollection>>do:
RowanServiceUpdater>>basicIssueCommand:session:onCompletion:
[
        | commandResult |
        session ifNotNil: [
            commandResult := self
                                 basicIssueCommand: services
                                 session: session
                                 onCompletion: completionBlock.
            RowanServiceUpdater current logComment:
                'Released inUpdate semaphore'.
            ^ commandResult ] ] in RowanServiceUpdater>>issueCommands:session:onCompletion: in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
RowanServiceUpdater>>inUpdateWhile:
RowanServiceUpdater>>issueCommands:session:onCompletion:
JadeiteBrowserPresenter>>updateServices:
JadeiteBrowserPresenter>>updateMethodSource
JadeiteBrowserPresenter>>methodSelectionChanged
[ :selection |
        self methodSelectionChanged ] in JadeiteBrowserPresenter>>connectPresenters in Block: [ :selection |...
FullBlockClosure(BlockClosure)>>cull:
[ aBlock cull: self ] in SpMultipleSelectionMode>>whenChangedDo: in Block: [ aBlock cull: self ]
FullBlockClosure(BlockClosure)>>cull:
FullBlockClosure(BlockClosure)>>cull:cull:
[ :block | block cull: self value cull: oldValue ] in ObservableValueHolder>>valueChanged: in Block: [ :block | block cull: self value cull: oldValue ]
OrderedCollection>>do:
ObservableValueHolder>>valueChanged:
[ | oldValue |
    oldValue := value.
    value := anObject.
    self valueChanged: oldValue ] in ObservableValueHolder>>value: in Block: [ | oldValue |...
FullBlockClosure(BlockClosure)>>ensure:
ObservableValueHolder>>value:
SpMultipleSelectionMode>>selectIndexes:
JadeiteListAdapter(SpMorphicListAdapter)>>selectionChanged:
MessageSend>>value:
MessageSend>>cull:
MessageSend>>cull:cull:
[action cull: anAnnouncement cull: announcer] in AnnouncementSubscription>>deliver: in Block: [action cull: anAnnouncement cull: announcer]
FullBlockClosure(BlockClosure)>>on:do:
FullBlockClosure(BlockClosure)>>on:fork:
AnnouncementSubscription>>deliver:
[ subscription deliver: anAnnouncement ] in SubscriptionRegistry>>deliver:to:startingAt: in Block: [ subscription deliver: anAnnouncement ]
FullBlockClosure(BlockClosure)>>ifCurtailed:
SubscriptionRegistry>>deliver:to:startingAt:
SubscriptionRegistry>>deliver:to:
SubscriptionRegistry>>deliver:
Announcer>>announce:
JadeiteTableMorph(Morph)>>doAnnounce:
JadeiteTableMorph(FTTableMorph)>>selectIndexes:andMakeVisibleIf:
JadeiteTableMorph>>selectIndexes:andMakeVisibleIf:
JadeiteTableMorph(FTTableMorph)>>selectIndexes:
JadeiteTableMorph(FTTableMorph)>>selectIndex:
FTMultipleSelectionStrategy(FTSelectionStrategy)>>toggleIndex:
FTMultipleSelectionStrategy>>selectIndex:event:
JadeiteTableMorph(FTTableMorph)>>selectIndex:event:
JadeiteTableMorph(FTTableMorph)>>mouseDown:
JadeiteTableMorph(Morph)>>handleMouseDown:
MouseButtonEvent>>sentTo:
JadeiteTableMorph(Morph)>>handleEvent:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
JadeiteTableMorph(Morph)>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
Morph>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
Morph>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
Morph>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
Morph>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
Morph>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
Morph>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
Morph>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
Morph>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
PanelMorph(Morph)>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
SpNotebookMorph(Morph)>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
Morph>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
Morph>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
Morph>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
JadeiteWindow(Morph)>>processEvent:using:
MorphicEventDispatcher>>dispatchMouseDown:with:
MorphicEventDispatcher>>handleMouseDown:
MouseButtonEvent>>sentTo:
[ ^ anEvent sentTo: self ] in MorphicEventDispatcher>>dispatchEvent:with: in Block: [ ^ anEvent sentTo: self ]
FullBlockClosure(BlockClosure)>>ensure:
MorphicEventDispatcher>>dispatchEvent:with:
WorldMorph(Morph)>>processEvent:using:
WorldMorph(Morph)>>processEvent:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendMouseEvent:
HandMorph>>handleEvent:
[
        (morphicWorld activeHand isNotNil and: [ anEvent hand isNotNil ]) ifTrue: [
            morphicWorld activeHand handleEvent: anEvent
        ]
    ] in OSWindowMorphicEventHandler>>dispatchMorphicEvent: in Block: [...
WorldState>>runStepMethodsIn:
WorldMorph>>runStepMethods
WorldState>>doOneCycleFor:
WorldMorph>>doOneCycleNow
WorldMorph>>doOneCycle
[
        | extraWorldsToDraw |
        extraWorldsToDraw := ExtraWorldListMutex critical: [
                                 self extraWorldList ].
        extraWorldsToDraw do: [ :world | world doOneCycle ].

        (self currentWorld isNotNil and: [
             (extraWorldsToDraw includes: self currentWorld) not ]) ifTrue: [
            self currentWorld doOneCycle ] ] in WorldMorph class>>doOneCycle in Block: [...
FullBlockClosure(BlockClosure)>>ensure:
WorldState class>>doDrawCycleWith:
WorldMorph class>>doOneCycle
MorphicRenderLoop>>doOneCycle
MorphicRenderLoop>>doOneCycleWhile:
[ MorphicRenderLoop new doOneCycleWhile: [ true ] ] in MorphicUIManager>>spawnNewProcess in Block: [ MorphicRenderLoop new doOneCycleWhile: [ tru[..]
[self value.
            "IMPORTANT: Do not step over next line of code. See method comments for details"
            Processor terminateRealActive] in FullBlockClosure(BlockClosure)>>newProcess in Block: [self value....
ericwinger commented 7 months ago

A lot of the guts of issuing have been changed. Closing but can reopen if needed. I don't see any walkbacks setting breakpoints now.