Lately I have many instances of these yellow cross over red background that happens when a low level morphic error is encountered. I don't know if it can help a morphic guru, but I just hate those stateful behavior with volatile states...It seems related to a MultiNewParagraph lines being nil like in following stack example. UndefinedObject(Object)>>error: Receiver: nil Arguments and temporary variables: aString: 'MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:' Receiver's instance variables: nil [] in WorldState>>displayWorldSafely: Receiver: a WorldState Arguments and temporary variables: <<error during printing> Receiver's instance variables: hands: {a HandMorph(3216)} activeHand: a HandMorph(3216) viewBox: 0@0 corner: 1113@867 canvas: a FormCanvas on: DisplayScreen(1113x867x32) damageRecorder: a DamageRecorder stepList: a Heap(StepMessage(#stepAt: -> 3PButton(#toggleProjectLocalness 739))...etc... lastStepTime: 690046 lastStepMessage: nil lastCycleTime: 690046 commandHistory: a CommandHistory alarms: a MorphicAlarmQueue() lastAlarmTime: 690046 remoteServer: nil multiCanvas: nil BlockClosure>>cull:cull: Receiver: [closure] in WorldState>>displayWorldSafely: Arguments and temporary variables: firstArg: 'MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:' secondArg: nil Receiver's instance variables: outerContext: WorldState>>displayWorldSafely: startpc: 97 numArgs: 2 [] in BlockClosure>>ifError: Receiver: [closure] in WorldState>>displayWorldSafely: Arguments and temporary variables: errorHandlerBlock: MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNon...etc... ex: [closure] in WorldState>>displayWorldSafely: Receiver's instance variables: outerContext: WorldState>>displayWorldSafely: startpc: 90 numArgs: 0 BlockClosure>>cull: Receiver: [closure] in BlockClosure>>ifError: Arguments and temporary variables: firstArg: MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone: Receiver's instance variables: outerContext: BlockClosure>>ifError: startpc: 40 numArgs: 1 [] in MethodContext(ContextPart)>>handleSignal: Receiver: BlockClosure>>on:do: Arguments and temporary variables: <<error during printing> Receiver's instance variables: sender: BlockClosure>>ifError: pc: 17 stackp: 3 method: (BlockClosure>>#on:do: "a CompiledMethod(680)") closureOrNil: nil receiver: [closure] in WorldState>>displayWorldSafely: BlockClosure>>ensure: Receiver: [closure] in MethodContext(ContextPart)>>handleSignal: Arguments and temporary variables: aBlock: [closure] in MethodContext(ContextPart)>>handleSignal: complete: nil returnValue: nil Receiver's instance variables: outerContext: MethodContext(ContextPart)>>handleSignal: startpc: 98 numArgs: 0 MethodContext(ContextPart)>>handleSignal: Receiver: BlockClosure>>on:do: Arguments and temporary variables: exception: MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone: val: nil Receiver's instance variables: sender: BlockClosure>>ifError: pc: 17 stackp: 3 method: (BlockClosure>>#on:do: "a CompiledMethod(680)") closureOrNil: nil receiver: [closure] in WorldState>>displayWorldSafely: MessageNotUnderstood(Exception)>>signal Receiver: MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone: Arguments and temporary variables: Receiver's instance variables: messageText: nil tag: nil signalContext: MessageNotUnderstood(Exception)>>signal handlerContext: BlockClosure>>on:do: outerContext: nil message: findBinaryIndex: [closure] in MultiNewParagraph(NewParagraph)>>fastFin...etc... receiver: nil reachedDefaultHandler: false UndefinedObject(Object)>>doesNotUnderstand: #findBinaryIndex:ifNone: Receiver: nil Arguments and temporary variables: aMessage: findBinaryIndex: [closure] in MultiNewParagraph(NewParagraph)>>fastFi...etc... exception: MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone: resumeValue: nil Receiver's instance variables: nil MultiNewParagraph(NewParagraph)>>fastFindFirstLineSuchThat: Receiver: a MultiNewParagraph Arguments and temporary variables: lineBlock: [closure] in MultiNewParagraph(NewParagraph)>>lineIndexForPoint: Receiver's instance variables: text: a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc... textStyle: a TextStyle Bitmap DejaVu Sans 9 firstCharacterIndex: 1 container: 0@0 corner: 669@9999999 lines: {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc... positionWhenComposed: 0@0 offsetToEnd: 1089 maxRightX: 652 selectionStart: a CharacterBlock with index 278 and character Character tab and...etc... selectionStop: a CharacterBlock with index 278 and character Character tab and ...etc... wantsColumnBreaks: false focused: true caretRect: nil showCaret: true presentationText: nil presentationLines: nil MultiNewParagraph(NewParagraph)>>lineIndexForPoint: Receiver: a MultiNewParagraph Arguments and temporary variables: aPoint: 669@274 i: nil py: 274 Receiver's instance variables: text: a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc... textStyle: a TextStyle Bitmap DejaVu Sans 9 firstCharacterIndex: 1 container: 0@0 corner: 669@9999999 lines: {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc... positionWhenComposed: 0@0 offsetToEnd: 1089 maxRightX: 652 selectionStart: a CharacterBlock with index 278 and character Character tab and...etc... selectionStop: a CharacterBlock with index 278 and character Character tab and ...etc... wantsColumnBreaks: false focused: true caretRect: nil showCaret: true presentationText: nil presentationLines: nil MultiNewParagraph>>displayOn:using:at: Receiver: a MultiNewParagraph Arguments and temporary variables: aCanvas: a FormCanvas on: DisplayScreen(1113x867x32) displayScanner: a MultiDisplayScanner somePosition: 80@436 visibleRectangle: 0@0 corner: 669@274 offset: 80@436 leftInRun: 0 line: nil i: nil iLimiT: nil Receiver's instance variables: text: a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc... textStyle: a TextStyle Bitmap DejaVu Sans 9 firstCharacterIndex: 1 container: 0@0 corner: 669@9999999 lines: {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc... positionWhenComposed: 0@0 offsetToEnd: 1089 maxRightX: 652 selectionStart: a CharacterBlock with index 278 and character Character tab and...etc... selectionStop: a CharacterBlock with index 278 and character Character tab and ...etc... wantsColumnBreaks: false focused: true caretRect: nil showCaret: true presentationText: nil presentationLines: nil FormCanvas>>paragraph:bounds:color: Receiver: a FormCanvas on: DisplayScreen(1113x867x32) Arguments and temporary variables: para: a MultiNewParagraph bounds: 0@0 corner: 669@450 c: Color black scanner: a MultiDisplayScanner Receiver's instance variables: target: nil filterSelector: nil origin: 80@436 clipRect: 77@436 corner: 752@710 form: DisplayScreen(1113x867x32) port: a GrafPort shadowColor: nil TextMorphForEditView(TextMorph)>>drawOn: Receiver: a TextMorphForEditView(975) Arguments and temporary variables: aCanvas: a FormCanvas on: DisplayScreen(1113x867x32) fauxBounds: 0@0 corner: 669@450 Receiver's instance variables: bounds: 0@0 corner: 669@450 owner: a TransformMorph(1921) submorphs: #() fullBounds: 0@0 corner: 669@450 color: Color black extension: a MorphExtension (1256) [other: (errorOnDraw -> true) (blinkStart -...etc... borderWidth: 0 borderColor: Color black textStyle: a TextStyle Bitmap DejaVu Sans 9 text: a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc... wrapFlag: true paragraph: a MultiNewParagraph editor: a SmalltalkEditor container: nil predecessor: nil successor: nil backgroundColor: nil margins: nil editHistory: nil editView: a PluggableTextMorphPlus(3589) acceptOnCR: false FormCanvas(Canvas)>>draw: Receiver: a FormCanvas on: DisplayScreen(1113x867x32) Arguments and temporary variables: anObject: a TextMorphForEditView(975) Receiver's instance variables: target: nil filterSelector: nil origin: 80@436 clipRect: 77@436 corner: 752@710 form: DisplayScreen(1113x867x32) port: a GrafPort shadowColor: nil FormCanvas(Canvas)>>drawMorph: Receiver: a FormCanvas on: DisplayScreen(1113x867x32) Arguments and temporary variables: aMorph: a TextMorphForEditView(975) Receiver's instance variables: target: nil filterSelector: nil origin: 80@436 clipRect: 77@436 corner: 752@710 form: DisplayScreen(1113x867x32) port: a GrafPort shadowColor: nil [] in TextMorphForEditView(Morph)>>fullDrawOn: Receiver: a TextMorphForEditView(975) Arguments and temporary variables: aCanvas: a FormCanvas on: DisplayScreen(1113x867x32) Receiver's instance variables: bounds: 0@0 corner: 669@450 owner: a TransformMorph(1921) submorphs: #() fullBounds: 0@0 corner: 669@450 color: Color black extension: a MorphExtension (1256) [other: (errorOnDraw -> true) (blinkStart -...etc... borderWidth: 0 borderColor: Color black textStyle: a TextStyle Bitmap DejaVu Sans 9 text: a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc... wrapFlag: true paragraph: a MultiNewParagraph editor: a SmalltalkEditor container: nil predecessor: nil successor: nil backgroundColor: nil margins: nil editHistory: nil editView: a PluggableTextMorphPlus(3589) acceptOnCR: false FormCanvas>>roundCornersOf:in:during: Receiver: a FormCanvas on: DisplayScreen(1113x867x32) Arguments and temporary variables: aMorph: a TextMorphForEditView(975) bounds: 0@0 corner: 669@450 aBlock: [closure] in TextMorphForEditView(Morph)>>fullDrawOn: Receiver's instance variables: target: nil filterSelector: nil origin: 80@436 clipRect: 77@436 corner: 752@710 form: DisplayScreen(1113x867x32) port: a GrafPort shadowColor: nil --- The full stack --- UndefinedObject(Object)>>error: [] in WorldState>>displayWorldSafely: BlockClosure>>cull:cull: [] in BlockClosure>>ifError: BlockClosure>>cull: [] in MethodContext(ContextPart)>>handleSignal: BlockClosure>>ensure: MethodContext(ContextPart)>>handleSignal: MessageNotUnderstood(Exception)>>signal UndefinedObject(Object)>>doesNotUnderstand: #findBinaryIndex:ifNone: MultiNewParagraph(NewParagraph)>>fastFindFirstLineSuchThat: MultiNewParagraph(NewParagraph)>>lineIndexForPoint: MultiNewParagraph>>displayOn:using:at: FormCanvas>>paragraph:bounds:color: TextMorphForEditView(TextMorph)>>drawOn: FormCanvas(Canvas)>>draw: FormCanvas(Canvas)>>drawMorph: [] in TextMorphForEditView(Morph)>>fullDrawOn: FormCanvas>>roundCornersOf:in:during: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FormCanvas(Canvas)>>roundCornersOf:during: TextMorphForEditView(Morph)>>fullDrawOn: FormCanvas(Canvas)>>fullDraw: FormCanvas(Canvas)>>fullDrawMorph: [] in [] in TransformMorph>>drawSubmorphsOn: Array(SequenceableCollection)>>reverseDo: [] in TransformMorph>>drawSubmorphsOn: FormCanvas>>transformBy:clippingTo:during:smoothing: TransformMorph>>drawSubmorphsOn: [] in TransformMorph(Morph)>>fullDrawOn: FormCanvas>>roundCornersOf:in:during: FormCanvas(Canvas)> |
Am 16.09.2013 um 23:26 schrieb Nicolas Cellier <[hidden email]>:
> Lately I have many instances of these yellow cross over red background that happens when a low level morphic error is encountered. > > It seems related to a MultiNewParagraph lines being nil like in following stack example. > > I don't know if it can help a morphic guru, but I just hate those stateful behavior with volatile states... > > Really hard to debug/understand!!! > FYI this also happens very often when using OB. Annoying to the level of unusable. Best -Tobias |
In reply to this post by Nicolas Cellier
Well,
- your stack is truncated, is there more somewhere? - can you say anything about how you got there? - did you notice that lines was not nil by the time the stack was written: lines: {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc... Cheers, Bob On 9/16/13 5:26 PM, Nicolas Cellier
wrote:
|
Ah yes, those volatile states... I got the red square/yellow cross by simple browsing activities2013/9/17 Bob Arning <[hidden email]>
|
> sometimes by changing list selection with vertical arrow keys
I haven't been experiencing many yellow-crosses-of-death but I have noticed that arrowing down through lists by holding down-arrow key now has a problem where the selection will jump back up every few milliseconds. Easy to reproduce. Just hold down-arrow in any list. I'm pretty sure this has to do with the recent feature of "pre-selecting" the selection that Tim wanted. > - navigating in debugger stack similarly... > For this specific stack, I just can't remember, too many occurrences... > > > 2013/9/17 Bob Arning <[hidden email]> >> >> Well, >> >> - your stack is truncated, is there more somewhere? >> - can you say anything about how you got there? >> - did you notice that lines was not nil by the time the stack was written: >> >> lines: {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a >> TextLine 140 to: 240 . ...etc... >> >> Cheers, >> Bob >> >> On 9/16/13 5:26 PM, Nicolas Cellier wrote: >> >> Lately I have many instances of these yellow cross over red background >> that happens when a low level morphic error is encountered. >> >> It seems related to a MultiNewParagraph lines being nil like in following >> stack example. >> >> I don't know if it can help a morphic guru, but I just hate those stateful >> behavior with volatile states... >> >> Really hard to debug/understand!!! >> >> >> >> >> > > > > |
In reply to this post by Nicolas Cellier
Would you have been writing to the Transcript
while this happened?
Cheers, Bob On 9/16/13 6:24 PM, Nicolas Cellier
wrote:
|
In reply to this post by Nicolas Cellier
Well, I can sort-of make it happen
- do you have the full SqueakDebug.log? - did you copy the portion you sent from the file or did you do it another way? (like the mail bug report menu item)??? - you might think about upping the numbers in ContextPart>>errorReportOn: so we can see the full stack next time [snip] strm position > (startPos+40000) ifTrue: [strm nextPutAll: '...etc...'. "make 40000 much larger" ^ self]. "exit early" cnt > 60 ifTrue: [strm nextPutAll: '-- and more not shown --'. ^ self]. "make 60 much larger" [snip] Cheers, Bob On 9/16/13 5:26 PM, Nicolas Cellier
wrote:
|
In reply to this post by Chris Muller-3
It is. I've mentioned that problem before. Having moaned though, I'd like to _keep_ preselection and have it just _work_. On a slow machine (my laptop) it provides valuable UI feedback. On a fast machine you'd see the value by opening up a Dependency Browser and clicking around the packages.
frank On 16 Sep 2013, at 23:33, Chris Muller <[hidden email]> wrote: >> sometimes by changing list selection with vertical arrow keys > > I haven't been experiencing many yellow-crosses-of-death but I have > noticed that arrowing down through lists by holding down-arrow key now > has a problem where the selection will jump back up every few > milliseconds. > > Easy to reproduce. Just hold down-arrow in any list. > > I'm pretty sure this has to do with the recent feature of > "pre-selecting" the selection that Tim wanted. > > > >> - navigating in debugger stack similarly... >> For this specific stack, I just can't remember, too many occurrences... >> >> >> 2013/9/17 Bob Arning <[hidden email]> >>> >>> Well, >>> >>> - your stack is truncated, is there more somewhere? >>> - can you say anything about how you got there? >>> - did you notice that lines was not nil by the time the stack was written: >>> >>> lines: {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a >>> TextLine 140 to: 240 . ...etc... >>> >>> Cheers, >>> Bob >>> >>> On 9/16/13 5:26 PM, Nicolas Cellier wrote: >>> >>> Lately I have many instances of these yellow cross over red background >>> that happens when a low level morphic error is encountered. >>> >>> It seems related to a MultiNewParagraph lines being nil like in following >>> stack example. >>> >>> I don't know if it can help a morphic guru, but I just hate those stateful >>> behavior with volatile states... >>> >>> Really hard to debug/understand!!! >>> >>> >>> >>> >>> >> >> >> >> > |
In reply to this post by Bob Arning-2
Ah another instance (see attachment) This time I clicked in a debugger methodList and you can see that (listSource itemSelectedAmongMultiple: row) ifTrue: [ 2013/9/17 Bob Arning <[hidden email]>
SqueakDebug.log (14K) Download Attachment |
Ah, sorry, it was not a debugger, it was a ChangeList, and curiously, the listSelections effectively contains a non boolean (nil) #(false false false true true nil true false false false false false false false false false false) 2013/9/17 Nicolas Cellier <[hidden email]>
|
To get better info next time
- you might think about upping the numbers in ContextPart>>errorReportOn: so we can see the full stack next time [snip] strm position > (startPos+40000) ifTrue: [strm nextPutAll: '...etc...'. "make 40000 much larger" ^ self]. "exit early" cnt > 60 ifTrue: [strm nextPutAll: '-- and more not shown --'. ^ self]. "make 60 much larger" [snip] I'll be looking at what you have sent. Also, do you have a Transcript open when this happens? Is anything written to it around the time of the error (the previous error, perhaps, more than this latest one)? Cheers, Bob On 9/17/13 4:26 PM, Nicolas Cellier
wrote:
- you might think about upping the numbers in ContextPart>>errorReportOn: so we can see the full stack next time |
Thanks. No Transcript opened 2013/9/17 Bob Arning <[hidden email]>
|
In reply to this post by Nicolas Cellier
What sort of select/deselect/removes had you
done to this ChangeList?
Cheer, Bob On 9/17/13 4:26 PM, Nicolas Cellier
wrote:
|
In reply to this post by Nicolas Cellier
Well, this I can reproduce.
So if we look at this puppy: ======================================== !PluggableListMorphOfMany methodsFor: 'event handling' stamp: 'raa 9/17/2013 18:02'! mouseMove: event "The mouse has moved, as characterized by the event provided. Adjust the scrollbar, and alter the selection as appropriate" | oldIndex oldVal row index bobsDebugging | bobsDebugging _ OrderedCollection new. bobsDebugging add: {'1'. dragOnOrOff}. event position y < self top ifTrue: [scrollBar scrollUp: 1. row := self rowAtLocation: scroller topLeft + (1 @ 1)] ifFalse: [row := event position y > self bottom ifTrue: [scrollBar scrollDown: 1. self rowAtLocation: scroller bottomLeft + (1 @ -1)] ifFalse: [ self rowAtLocation: event position]]. row = 0 ifTrue: [^super mouseDown: event]. index := self modelIndexFor: row. model okToChange ifFalse: [^self]. "No change if model is locked" bobsDebugging add: {'2'. dragOnOrOff}. dragOnOrOff ifNil: ["Was not set at mouse down, which means the mouse must have gone down in an area where there was no list item" dragOnOrOff := (self listSelectionAt: index) not]. bobsDebugging add: {'3'. dragOnOrOff}. "Set meaning for subsequent dragging of selection" oldIndex := self getCurrentSelectionIndex. oldIndex ~= 0 ifTrue: [oldVal := self listSelectionAt: oldIndex]. "Set or clear new primary selection (listIndex)" dragOnOrOff ifTrue: [self changeModelSelection: index] ifFalse: [self changeModelSelection: 0]. "Need to restore the old one, due to how model works, and set new one." oldIndex ~= 0 ifTrue: [self listSelectionAt: oldIndex put: oldVal]. bobsDebugging add: {'4'. dragOnOrOff}. self listSelectionAt: index put: dragOnOrOff. ! ! ========================================== I added some debugging code which reports an OrderedCollection(#('1' false) #('2' false) #('3' false) #('4' nil)) So we clobbered dragOnOrOff between the 3rd and 4th entries in the list. That's happening because of: ============================================ !PluggableListMorph methodsFor: 'model access' stamp: 'kb 6/5/2013 21:12'! changeModelSelection: anInteger " Change the model's selected item index to be anInteger. Enable the pre selection highlight. Step the World forward to let the pre selection highlight take effect. " self rowAboutToBecomeSelected: (self uiIndexFor: anInteger). World doOneCycle. setIndexSelector ifNotNil: [ model perform: setIndexSelector with: anInteger ].! ! ============================================= The World doOneCycle permits another ui event to be processed while we are still in the mouseMove:. If the event is a mouseUp: then mouseUp: event dragOnOrOff := nil. "So improperly started drags will have not effect" kaboom. Cheers, Bob On 9/17/13 4:26 PM, Nicolas Cellier
wrote:
|
In reply to this post by Bob Arning-2
Many actions, you know I was not tracking the bug but rather changing the Compiler, and the bug just broke my flow, so it's difficult to tell exactly. But I have instrumented :ChangeList>>listSelectionAt: index put: value setSelectionListSelector ifNil:[^false]. ^model perform: setSelectionListSelector with: index with: value self listSelectionAt: index put: dragOnOrOff. dragOnOrOff ifNil: ["Was not set at mouse down, which means the mouse must have gone down in an area where there was no list item" dragOnOrOff := (self listSelectionAt: index) not]. Hey but this is an inst var and it's not immutable ! For example, mouseUp: can set it to nil. Why a mouseUp: could occur before a mouseMove: is fully processed, I can't tell... That gets interesting. Do I have 2 concurrent UI processes ? The ProcessBrowser does not tell so... Those lines just above did not fail: "Set or clear new primary selection (listIndex)" dragOnOrOff ifTrue: [self changeModelSelection: index] ifFalse: [self changeModelSelection: 0]. So dragOnOrOff still was a boolean there. Could dragOnOrOff mutation be triggered by changeModelSelection: send ? 2013/9/17 Bob Arning <[hidden email]>
|
In reply to this post by Bob Arning-2
Ah we cross posted, good find! Those guys messing with World doOneCycle are just like the sorcerer's apprentice...2013/9/18 Bob Arning <[hidden email]>
|
So, the question is do they really need
#doOneCycle or something less, like #displayWorldSafely
Cheers, Bob On 9/17/13 6:36 PM, Nicolas Cellier
wrote:
|
After replacing doOneCycle with displayWorldSafely, I got much more stable morphs... But see yet another red square attached...
2013/9/18 Bob Arning <[hidden email]>
SqueakDebug.log (17K) Download Attachment |
Well, that's actually the first one you posted.
So, you have: Error: MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone: 24 September 2013 1:28:29.137 am VM: Mac OS - Smalltalk Image: Squeak4.5 [latest update: #12790] - Was this a clean update 12790? Or did you have other code installed? - Can you comment on what you were doing when the error occurred? Cheers, Bob On 9/23/13 7:43 PM, Nicolas Cellier
wrote:
|
In reply to this post by Nicolas Cellier
One more question:
- Were there any processes running other than those standard in all Squeaks? Cheers, Bob On 9/23/13 7:43 PM, Nicolas Cellier
wrote:
|
Free forum by Nabble | Edit this page |