Hi,
I took a new squeak-web-118 image, opened the Universe Browser and attempted to update the package "OmniBrowser" from version 0.337 to 0.342. The result was a DNU for #packages sent to nil, the report is below: I feel helpless to fix this; I believe it has to do with the Universe Browser trying to refresh whilst the update is loading. "parent" is nil (?) I'm hoping for two things - first is a fix so I can keep my image up to date. But the other: more important even - somebody to show me how to get from this error to an understanding of what has gone wrong... Thanks, Steve ------------------------------- Subject: [BUG]UndefinedObject(Object)>>doesNotUnderstand: #packages 17 May 2007 7:43:48 pm VM: Mac OS - a SmalltalkImage Image: Squeak3.9 [latest update: #7067] SecurityManager state: Restricted: false FileAccess: true SocketAccess: true Working Dir /Applications/Squeak Trusted Dir /Applications/Squeak Untrusted Dir /Users/steve/Library/Preferences/Squeak/Internet/My Squeak UndefinedObject(Object)>>doesNotUnderstand: #packages Receiver: nil Arguments and temporary variables: aMessage: packages Receiver's instance variables: nil OBMetaEdge>>nodesForParent: Receiver: #packages->package Arguments and temporary variables: aNode: nil ea: nil Receiver's instance variables: label: 'Packages' selector: #packages metaNode: package #packageVersions->packageVersion OBModalFilter>>nodesForParent: Receiver: an OBModalFilter Arguments and temporary variables: aNode: nil Receiver's instance variables: metaNode: universe #categories->category #packages->package #statuses->status monitor: an OBColumn(OmniBrowser) selection: 2 OBColumn>>getChildren Receiver: an OBColumn(OmniBrowser) Arguments and temporary variables: Receiver's instance variables: panel: an OBColumnPanel filter: an OBModalFilter parent: nil children: an OrderedCollection(an OBUPackageNode an OBUPackageNode an OBUPackag...etc... selection: 76 --- The full stack --- UndefinedObject(Object)>>doesNotUnderstand: #packages OBMetaEdge>>nodesForParent: OBModalFilter>>nodesForParent: OBColumn>>getChildren - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBColumn>>refreshAndSignal: OBColumn>>refresh: MessageSend>>valueWithArguments: [] in ActionSequence>>valueWithArguments: {[:each | answer := each valueWithArguments: anArray]} ActionSequence(SequenceableCollection)>>do: ActionSequence>>valueWithArguments: [] in OBAnnouncer>>announce: {[:class :action | (ann isKindOf: class) ifTrue: [action valueWithArguments...]} [] in IdentityDictionary(Dictionary)>>keysAndValuesDo: {[:assoc | aBlock value: assoc key value: assoc value]} IdentityDictionary(Set)>>do: IdentityDictionary(Dictionary)>>associationsDo: IdentityDictionary(Dictionary)>>keysAndValuesDo: OBAnnouncer>>announce: OBUBrowser(OBBrowser)>>announce: OBUFixedButtonPanel(OBPanel)>>announce: OBUInstallSelectionCommand(OBUCommand)>>refreshRequired OBUInstallSelectionCommand>>execute PluggableButtonMorph>>performAction [] in PluggableButtonMorph>>mouseUp: {[:m | (m containsPoint: evt cursorPoint) ifTrue: [m performAction]]} Array(SequenceableCollection)>>do: PluggableButtonMorph>>mouseUp: PluggableButtonMorph(Morph)>>handleMouseUp: MouseButtonEvent>>sentTo: PluggableButtonMorph(Morph)>>handleEvent: PluggableButtonMorph(Morph)>>handleFocusEvent: [] in HandMorph>>sendFocusEvent:to:clear: {[ActiveHand := self. ActiveEvent := anEvent. result := focusHolder han...]} [] in PasteUpMorph>>becomeActiveDuring: {[aBlock value]} BlockContext>>on:do: PasteUpMorph>>becomeActiveDuring: HandMorph>>sendFocusEvent:to:clear: HandMorph>>sendEvent:focus:clear: HandMorph>>sendMouseEvent: HandMorph>>handleEvent: HandMorph>>processEvents [] in WorldState>>doOneCycleNowFor: {[:h | ActiveHand := h. h processEvents. capturingGesture := capturingGest...]} Array(SequenceableCollection)>>do: WorldState>>handsDo: WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle [] in Project class>>spawnNewProcess {[[World doOneCycle. Processor yield. false] whileFalse. nil]} [] in BlockContext>>newProcess {[self value. Processor terminateActive]} _______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners |
On 17/05/07, Stephen Davies <[hidden email]> wrote:
> I feel helpless to fix this; I believe it has to do with the Universe > Browser trying to refresh whilst the update is loading. "parent" is > nil (?) > > I'm hoping for two things - first is a fix so I can keep my image up > to date. But the other: more important even - somebody to show me how > to get from this error to an understanding of what has gone wrong... OK - I've had a little go with some success. Who wants to critique my process: - an argument "aNode" was nil when obviously it shouldn't have been. - so I searched my way down the walkback, and eventually found that getChildren in OBColumn had been called - it did "children := self filter nodesForParent: self parent.". But "self parent" returned nil. Looking at the helpful class comment (YAY!!) I concluded that the column was the leftmost in a browser, hence had no parent. Couldn't immediately follow what the code was doing, but then ... - I noticed that the name of the OBColumn was the name of a class category in my system - so my problem wasn't with the Universe Browser but with a class browser. - So I restarted my image, closed the browser (and monticello for luck) and tried again. Unfortunately, I got another walkback for the same reason, only this time the problem column was in the Universe Browser. That has to be open, so what now? Scratching around in the "problem" OBColumn using inspector, browser etc and I get a tentative theory by leap of guesswork - The OBColumn thinks its name is "Selected packages (0)". But the Universe Browser still has "Selected packages (6)". Maybe the mismatch is why there is no parent? So I restart my image again, then in the Universe Browser I switch the radio buttons at the bottom away from "Statuses" to "Packages" and try the install again Fails again. So I restart my image again, switch to Packages and highlight a package and version and try the install again. Still get the walkback. Give up my theory about the name of the item. This time the OBColumn is an OBColumn(AST). That's the package highlighted in the left-most column of the Universe Browser. I note that the OBColumn "children" inst variable does contain an OrderedCollection. Using the inspector I see that it is the list of packages shown in the leftmost pane of the Universe Browser. Looks like getChildren is trying to refresh that list by asking the filter to refetch the list fo r the same parent as the selected entry. Seeing our entry doesn't have a parent, I decide to change getChildren to just return the children as they are in that case. Aargh - in trying to edit it I get a "primitive failed" - <primitive: 'primitiveCopyBits' module: 'BitBltPlugin'> Something to do with FreeType2 and Shout syntax colouring I think. All my code become a crossed out red box. So I go to the Preference Browser and turn off "syntax highlighting as you type". We'll figure that out another day. Insert "(self parent) ifNil [^children]." at the top. Save, save the image and try again. I get a warning "You are about to load new versions of the following packages that have unsaved changes in the image. If you continue, you will lose these changes." for OmniBrowser. Proceed... Bugger - my change is overwritten and up comes the DNU again. This time I edit the method right in the debug window. Alt-S and then "Restart" and "Proceed". Yay - looks like I got there in the end. Into the change sorter and move the OBColumn change into a more meaningfully named changeset. So how did I do negotiating the obstacle course ;-) ? Steve _______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners |
On 17/05/07, Stephen Davies <[hidden email]> wrote:
> > OK - I've had a little go with some success. > > Who wants to critique my process: > [snip] That looks like an object lesson in how to track down a bug in Squeak. All you need to do now is file a bug report in mantis and upload a changeset with your fix in it, and you'll have the makings of a great blog post! _______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners |
Free forum by Nabble | Edit this page |