Debugger shows message from class that isn't the receiver's
Andrew P. Black
black at cse.ogi.edu
Mon Apr 30 05:14:44 UTC 2001
I'm playing around with BookMorphs -- actually, I'm trying to get my
ECOOP presentation into
a book, just to see if I can. On this journey, I have encounterd an
error that I just plain don't understand. That is: I don't
understand the message that the debugger is sending me!
After reading in (in my case, right now, zero pages), the image
reading code writes out the bookMorph. I get the same problem if I
just write out a bookMorph from the menu. I see a progress dialog
'please wait while the objects are counted', and then get a MNU.
Here is the (top of the) walkback:
29 April 2001 6:18:04 pm
MessageNotUnderstood: xxxInstVarAt:
VM: Mac OS - nil
Image: Squeak3.1alpha [latest update: #'Squeak3.1alpha' of 12 April
2001 update 3910]
PasteUpMorph(Object)>>doesNotUnderstand:
PasteUpMorph>>DoItwith:
ReferenceStream(DataStream)>>writeInstance:
ReferenceStream(DataStream)>>nextPut:
[] in ReferenceStream(DataStream)>>nextPutAll:
Array(SequenceableCollection)>>do:
...
What's weird here is that writeInstance -- code shown here ---
writeInstance: anObject
"PRIVATE -- Write the contents of an arbitrary instance."
^ anObject storeDataOn: self
is sending "storeDataOn: self" to anObject, and anObject is "a
PasteUpMorph<page>(2386)", the pasteUpMorph that is the top page in
my book. So, far, so good. But the method that shows up in the next
frame of the stack trace is "DoItWith". When I browse that frame
with the debugger, what I see is the following method:
storeDataOn: aDataStream
"Store myself on a DataStream. See also objectToStoreOnDataStream.
must send 'aDataStream beginInstance:size:'"
| cntInstVars |
cntInstVars _ self class instSize.
"cntIndexedVars _ self basicSize."
aDataStream
beginInstance: self xxxClass
size: cntInstVars "+ cntIndexedVars".
1 to: cntInstVars do:
[:i | aDataStream nextPut: (self xxxInstVarAt: i)].
" 1 to: cntIndexedVars do:
[:i | aDataStream nextPut: (self basicAt: i)]
"
This is not a method from PasteUpMorph at all. It's a method from
ObjectOut, which is why it is reasonable for it to be sending
xxxInstVarAt: to self. But self is my PastUpMorph, hence the MNU.
So, what's going on here? Perhaps my PasteUpMorph has become an
ObjectOut and then become a PasteUpMorph again? If so, why is it
trying to store itself on the disk? Was it reconstituted a bit too
soon? Here be deep magic! All that I wanted to do was load some
images ...
Here is the whole of SqueakDebug.log:
29 April 2001 6:18:04 pm
MessageNotUnderstood: xxxInstVarAt:
VM: Mac OS - nil
Image: Squeak3.1alpha [latest update: #'Squeak3.1alpha' of 12 April
2001 update 3910]
PasteUpMorph(Object)>>doesNotUnderstand:
PasteUpMorph>>DoItwith:
ReferenceStream(DataStream)>>writeInstance:
ReferenceStream(DataStream)>>nextPut:
[] in ReferenceStream(DataStream)>>nextPutAll:
Array(SequenceableCollection)>>do:
ReferenceStream(DataStream)>>nextPutAll:
ReferenceStream(DataStream)>>writeArray:
ReferenceStream(DataStream)>>nextPut:
SmartRefStream>>instVarInfo:
[] in SmartRefStream>>nextPut:
ProgressInitiationException>>defaultAction
ProgressInitiationException(Exception)>>pass
[] in BlockContext>>valueUninterruptably
ProgressInitiationException(Exception)>>handlerAction
ProgressInitiationException(Exception)>>signal
ProgressInitiationException>>display:at:from:to:during:
ProgressInitiationException class>>display:at:from:to:during:
String>>displayProgressAt:from:to:during:
SmartRefStream>>nextPut:
StandardFileStream(ReadWriteStream)>>fileOutClass:andObject:
[] in BookMorph>>saveIndexOnURL
BlockContext>>on:do:
[] in BlockContext>>valueUninterruptably
BlockContext>>on:do:
[] in BlockContext>>valueUninterruptably
BlockContext>>on:do:
BlockContext>>valueUninterruptably
BlockContext>>ensure:
CursorWithMask(Cursor)>>showWhile:
BookMorph>>saveIndexOnURL
BookMorph>>saveAsNumberedURLs
BookMorph>>savePagesOnURL
BookMorph>>loadImagesIntoBook
[] in MenuItemMorph>>invokeWithEvent:
BlockContext>>on:do:
[] in BlockContext>>valueUninterruptably
BlockContext>>on:do:
[] in BlockContext>>valueUninterruptably
BlockContext>>on:do:
BlockContext>>valueUninterruptably
BlockContext>>ensure:
CursorWithMask(Cursor)>>showWhile:
MenuItemMorph>>invokeWithEvent:
MenuItemMorph>>mouseUp:
MenuItemMorph>>handleMouseUp:
MouseButtonEvent>>sentTo:
MenuItemMorph(Morph)>>handleEvent:
MorphicEventDispatcher>>dispatchDefault:with:
MorphicEventDispatcher>>dispatchEvent:with:
MenuItemMorph(Morph)>>processEvent:using:
MorphicEventDispatcher>>dispatchDefault:with:
MorphicEventDispatcher>>dispatchEvent:with:
MenuMorph(Morph)>>processEvent:using:
MenuMorph(Morph)>>processEvent:
MenuMorph>>handleFocusEvent:
[] in HandMorph>>sendFocusEvent:to:clear:
PasteUpMorph>>becomeActiveDuring:
HandMorph>>sendFocusEvent:to:clear:
HandMorph>>sendEvent:focus:clear:
HandMorph>>sendMouseEvent:
HandMorph>>handleEvent:
HandMorph>>processEvents
[] in WorldState>>doOneCycleNowFor:
Array(SequenceableCollection)>>do:
WorldState>>handsDo:
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
PasteUpMorph>>doOneCycle
[] in Project class>>spawnNewProcess
[] in BlockContext>>newProcess
More information about the Squeak-dev
mailing list
|