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
