Lukas,

I wish you good luck in recovering your work; hopefully the change log will 
allow you to avoid losses.  Perhaps a toolsmith among us can take a look at Ian 
Bartholomew's Chunk Browser for Dolphin and do something similar on Pharo; it 
is a very helpful tool.  Another one I would like to see is Ghoul, which 
provides a debugger-like view of Dolphin's crash logs.

Not at all to say "I told you so," I have been arguing against save+quit for 
years, precissely because I was shafted by it in the past.  That was on 
Smalltalk/V, but I have been skiddish about it ever since.  If something bad 
happens post-save, you have no chance to fix it.  In your case, the image might 
have melted down anyway, so good backups and recovery tools are a must.

Bill


-----Original Message-----
From: [email protected] 
[mailto:[email protected]] On Behalf Of Lukas Renggli
Sent: Sunday, November 22, 2009 11:02 AM
To: Pharo Development
Subject: [Pharo-project] Safe and Quit can be dangerous

I clicked on 'safe and quit' in the latest Pharo 1.0rc1 image. Just before the 
window closed I saw a debugger popping up and now my image is broken. The VM 
crashes shortly after being able to interact with it. This is not the first 
time that happened to me.

Below the stack trace of the debugger.

Cheers,
Lukas

MessageNotUnderstood: receiver of "isEmpty" is nil
22 November 2009 1:24:56 pm

VM: Mac OS - intel - 1062 - Squeak3.8.1 of '28 Aug 2006' [latest
update: #6747] Squeak VM 4.1.1b2
Image: Pharo1.0rc1 [Latest update: #10492]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /Users/renggli/University/pharo/PetitParser
Trusted Dir /foobar/tooBar/forSqueak/bogus Untrusted Dir 
/Users/renggli/Library/Preferences/Squeak/Internet/My Squeak

UndefinedObject(Object)>>doesNotUnderstand: #isEmpty
        Receiver: nil
        Arguments and temporary variables:
                aMessage:       isEmpty
                exception:      MessageNotUnderstood: receiver of "isEmpty" is 
nil
                resumeValue:    nil
        Receiver's instance variables:
nil

MouseOverHandler>>processMouseOver:
        Receiver: a MouseOverHandler
        Arguments and temporary variables:
<<error during printing>
        Receiver's instance variables:
                mouseOverMorphs:        an Array(a 
PluggableStandardWindow(1005) a
PasteUpMorph(1622) ...etc...
                enteredMorphs:  nil
                overMorphs:     nil
                leftMorphs:     nil

HandMorph>>processEvents
        Receiver: a HandMorph(3216)
        Arguments and temporary variables:
                evt:    nil
                evtBuf:         nil
                type:   nil
                hadAny:         nil
        Receiver's instance variables:
                bounds:         1...@108 corner: 1...@124
                owner:  a PasteUpMorph(1622) [world]
                submorphs:      #()
                fullBounds:     1...@108 corner: 1...@124
                color:  Color blue
                extension:      a MorphExtension (539) [eventHandler = an 
EventHandler]
                mouseFocus:     nil
                keyboardFocus:  a PluggableButtonMorph(2190)
                eventListeners:         nil
                mouseListeners:         nil
                keyboardListeners:      nil
                mouseClickState:        nil
                mouseOverHandler:       a MouseOverHandler
                lastMouseEvent:         [...@108 mouseUp 2857590 nil]
                targetOffset:   2...@11
                damageRecorder:         a DamageRecorder
                cacheCanvas:    nil
                cachedCanvasHasHoles:   true
                temporaryCursor:        nil
                temporaryCursorOffset:  nil
                hardwareCursor:         nil
                hasChanged:     true
                savedPatch:     nil
                userInitials:   ''
                lastEventBuffer:        #(1 2857590 120 108 0 0 0 1)
                lastKeyScanCode:        35
                combinedChar:   nil

[] in WorldState>>doOneCycleNowFor:
        Receiver: a WorldState
        Arguments and temporary variables:
                h:      a HandMorph(3216)
        Receiver's instance variables:
                hands:  an Array(a HandMorph(3216))
                viewBox:        0...@0 corner: 1...@916
                canvas:         a FormCanvas on: DisplayScreen(1314x916x32)
                damageRecorder:         a DamageRecorder
                stepList:       a Heap(StepMessage(#stepAt: -> a 
PreDebugWindow(1012))(a
PreDebugWind...etc...
                lastStepTime:   2857650
                lastStepMessage:        nil
                lastCycleTime:  2857677
                commandHistory:         a CommandHistory
                alarms:         a Heap()
                lastAlarmTime:  2857650

Array(SequenceableCollection)>>do:
        Receiver: an Array(a HandMorph(3216))
        Arguments and temporary variables:
                aBlock:         [closure] in WorldState>>doOneCycleNowFor:
                index:  1
                indexLimiT:     1
        Receiver's instance variables:
an Array(a HandMorph(3216))

WorldState>>handsDo:
        Receiver: a WorldState
        Arguments and temporary variables:
                aBlock:         [closure] in WorldState>>doOneCycleNowFor:
        Receiver's instance variables:
                hands:  an Array(a HandMorph(3216))
                viewBox:        0...@0 corner: 1...@916
                canvas:         a FormCanvas on: DisplayScreen(1314x916x32)
                damageRecorder:         a DamageRecorder
                stepList:       a Heap(StepMessage(#stepAt: -> a 
PreDebugWindow(1012))(a
PreDebugWind...etc...
                lastStepTime:   2857650
                lastStepMessage:        nil
                lastCycleTime:  2857677
                commandHistory:         a CommandHistory
                alarms:         a Heap()
                lastAlarmTime:  2857650

WorldState>>doOneCycleNowFor:
        Receiver: a WorldState
        Arguments and temporary variables:
                aWorld:         a PasteUpMorph(1622) [world]
        Receiver's instance variables:
                hands:  an Array(a HandMorph(3216))
                viewBox:        0...@0 corner: 1...@916
                canvas:         a FormCanvas on: DisplayScreen(1314x916x32)
                damageRecorder:         a DamageRecorder
                stepList:       a Heap(StepMessage(#stepAt: -> a 
PreDebugWindow(1012))(a
PreDebugWind...etc...
                lastStepTime:   2857650
                lastStepMessage:        nil
                lastCycleTime:  2857677
                commandHistory:         a CommandHistory
                alarms:         a Heap()
                lastAlarmTime:  2857650

WorldState>>doOneCycleFor:
        Receiver: a WorldState
        Arguments and temporary variables:
                aWorld:         a PasteUpMorph(1622) [world]
        Receiver's instance variables:
                hands:  an Array(a HandMorph(3216))
                viewBox:        0...@0 corner: 1...@916
                canvas:         a FormCanvas on: DisplayScreen(1314x916x32)
                damageRecorder:         a DamageRecorder
                stepList:       a Heap(StepMessage(#stepAt: -> a 
PreDebugWindow(1012))(a
PreDebugWind...etc...
                lastStepTime:   2857650
                lastStepMessage:        nil
                lastCycleTime:  2857677
                commandHistory:         a CommandHistory
                alarms:         a Heap()
                lastAlarmTime:  2857650

PasteUpMorph>>doOneCycle
        Receiver: a PasteUpMorph(1622) [world]
        Arguments and temporary variables:

        Receiver's instance variables:
                bounds:         0...@0 corner: 1...@916
                owner:  nil
                submorphs:      an Array(a TaskbarMorph(3095) a 
PreDebugWindow(1012) a
SystemWindow(...etc...
                fullBounds:     nil
                color:  (Color r: 0.97 g: 0.98 b: 1.0)
                extension:      a MorphExtension (2543) [eventHandler = an 
EventHandler]
 [other:  (...etc...
                borderWidth:    0
                borderColor:    (Color r: 0.03 g: 0.02 b: 0.0)
                presenter:      a Presenter (1246)
                model:  a MorphicModel(1926)
                cursor:         1
                padding:        3
                backgroundMorph:        nil
                isPartsBin:     nil
                autoLineLayout:         false
                indicateCursor:         nil
                resizeToFit:    nil
                wantsMouseOverHalos:    nil
                worldState:     a WorldState
                griddingOn:     nil

[] in Project class>>spawnNewProcess
        Receiver: Project
        Arguments and temporary variables:

        Receiver's instance variables:
                superclass:     Model
                methodDict:     a MethodDictionary(size 167)
                format:         172
                instanceVariables:      #('world' 'changeSet' 'transcript'
'parentProject' 'previous...etc...
                organization:   ('*Polymorph-Widgets'
assureTaskbarPresenceMatchesPreference crea...etc...
                subclasses:     nil
                name:   #Project
                classPool:      a Dictionary(#AllProjects->an 
OrderedCollection(a
Project(Unnamed)) ...etc...
                sharedPools:    nil
                environment:    Smalltalk
                category:       #'System-Support'
                traitComposition:       {}
                localSelectors:         nil

[] in BlockClosure>>newProcess
        Receiver: [closure] in Project class>>spawnNewProcess
        Arguments and temporary variables:

        Receiver's instance variables:
                outerContext:   Project class>>spawnNewProcess
                startpc:        53
                numArgs:        0


--- The full stack ---
UndefinedObject(Object)>>doesNotUnderstand: #isEmpty
MouseOverHandler>>processMouseOver:
HandMorph>>processEvents
[] in WorldState>>doOneCycleNowFor:
Array(SequenceableCollection)>>do:
WorldState>>handsDo:
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
PasteUpMorph>>doOneCycle
[] in Project class>>spawnNewProcess
[] in BlockClosure>>newProcess
------------------------------------------------------------

--
Lukas Renggli
http://www.lukas-renggli.ch

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to