Ok, this is the behaviour with an image #13320 and the newest cog vm. I don't need to do anything because the NonInteractiveUIManager is set to default automatically regardless if -nodisplay or -headless is specified. And in my case this is broken. However if I hack away the noninteractive stuff by doing UIManager default: (UIManager default instVarAt: 1). than it works. A debugger pops up in the image and can see the real exception with VNC. So to me it seems that there is something broken. Igor, can you add anything. I think Marcus is not available at the moment. Norbert Am 28.11.2011 um 15:42 schrieb Norbert Hartl:
I'm trying to do some Katas in deploying pharo images on my server. After finding my image crashing all the time I tried to research what I need to take care of. I came to the conclusion that
UIManager default: UIManager default nonInteractiveManager. NonInteractiveUIManager snapshotErrorImage: true.
would be the right thing to do in a server environment. But I only get the stack trace attached. So I'm asking myself if I need to do something different in order to get the stack trace of my own application in case something goes wrong.
Norbert
----
28 November 2011 3:35:54 pm
VM: Mac OS - intel - 1072 - Croquet Closure Cog VM [CoInterpreter VMMaker-oscog.52] Cog VM 4.0.0 Image: Pharo1.3 [Latest update: #13320]
NonInteractiveUIManager(Object)>>doesNotUnderstand: #openDebuggerOn:context:label:contents:fullView: Receiver: a NonInteractiveUIManager Arguments and temporary variables: aMessage: openDebuggerOn: a Process in GRPharoPlatform>>openDebuggerOn: context...etc... exception: MessageNotUnderstood: NonInteractiveUIManager>>openDebuggerOn:contex...etc... resumeValue: nil Receiver's instance variables: uiManager: a MorphicUIManager doNotQuitOnRestart: false
Debugger class>>openOn:context:label:contents:fullView: Receiver: Debugger Arguments and temporary variables: process: a Process in GRPharoPlatform>>openDebuggerOn: context: OrderedCollection(Object)>>error: title: 'Error: startIndex is out of bounds' contentsStringOrNil: nil bool: true fullView: true Receiver's instance variables: superclass: CodeHolder methodDict: a MethodDictionary(#addOptionalButtonsTo:at:plus:->(Debugger>>#addO...etc... format: 166 instanceVariables: #('interruptedProcess' 'interruptedController' 'contextStack...etc... organization: ('*Ocompletion' guessTypeForName:) ('*Polymorph-Widgets' addOptio...etc... subclasses: nil name: #Debugger classPool: a Dictionary(#AlwaysOpenFullDebugger->false #ContextStackKeystrokes-...etc... sharedPools: nil environment: a SystemDictionary(lots of globals) category: #'Tools-Debugger' traitComposition: nil localSelectors: nil
[:tool | ^ tool openOn: aProcess context: aContext label: aString contents: contents fullView: aBool] in ToolRegistry>>debug:context:label:contents:fullView: Receiver: a ToolRegistry Arguments and temporary variables: aProcess: Debugger aContext: a Process in GRPharoPlatform>>openDebuggerOn: aString: OrderedCollection(Object)>>error: contents: 'Error: startIndex is out of bounds' aBool: nil tool: true Receiver's instance variables: tools: an IdentityDictionary(#basicInspector->BasicInspector #browser->[self de...etc... inspectorsMap: an IdentityDictionary(#CompiledMethod->#CompiledMethodInspector ...etc...
ToolRegistry>>using:do: Receiver: a ToolRegistry Arguments and temporary variables: aToolName: #debugger aBlock: [:tool | ^ tool openOn: aProcess context: aContext label: aString...etc... tool: Debugger Receiver's instance variables: tools: an IdentityDictionary(#basicInspector->BasicInspector #browser->[self de...etc... inspectorsMap: an IdentityDictionary(#CompiledMethod->#CompiledMethodInspector ...etc...
ToolRegistry>>debug:context:label:contents:fullView: Receiver: a ToolRegistry Arguments and temporary variables: aProcess: a Process in GRPharoPlatform>>openDebuggerOn: aContext: OrderedCollection(Object)>>error: aString: 'Error: startIndex is out of bounds' contents: nil aBool: true Receiver's instance variables: tools: an IdentityDictionary(#basicInspector->BasicInspector #browser->[self de...etc... inspectorsMap: an IdentityDictionary(#CompiledMethod->#CompiledMethodInspector ...etc...
Process>>debug:title:full: Receiver: a Process in GRPharoPlatform>>openDebuggerOn: Arguments and temporary variables: context: OrderedCollection(Object)>>error: title: 'Error: startIndex is out of bounds' bool: true topCtxt: GRPharoPlatform>>openDebuggerOn: Receiver's instance variables: nextLink: nil suspendedContext: GRPharoPlatform>>openDebuggerOn: priority: 60 myList: nil threadId: nil errorHandler: nil name: 'ZnMultiThreadedServer HTTP worker' env: nil
[process debug: anError signalerContext title: anError description full: true] in GRPharoPlatform>>openDebuggerOn: Receiver: a GRPharoPlatform Arguments and temporary variables: anError: Error: startIndex is out of bounds process: a Process in GRPharoPlatform>>openDebuggerOn: Receiver's instance variables: a GRPharoPlatform
WorldState>>runStepMethodsIn: Receiver: a WorldState Arguments and temporary variables: aWorld: a PasteUpMorph(425197568) [world] queue: SharedQueue with 0 items nextInQueue: [process debug: anError signalerContext title: anError descrip...etc... Receiver's instance variables: hands: an Array(a HandMorph(843055104)) viewBox: 0@0 corner: 1296@875 canvas: a FormCanvas on: RFBDisplayScreen(1296x875x32) damageRecorder: a DamageRecorder stepList: a Heap(StepMessage(#stepAt: -> an OverflowRowMorph(210239488))(an Ove...etc... lastStepTime: 19250 lastStepMessage: nil lastCycleTime: 19271 alarms: a Heap() lastAlarmTime: 19250 menuBuilder: nil
PasteUpMorph>>runStepMethods Receiver: a PasteUpMorph(425197568) [world] Arguments and temporary variables:
Receiver's instance variables: bounds: 0@0 corner: 1296@875 owner: nil submorphs: an Array(a TaskbarMorph(984088576) a SystemWindow(347865088) a Syste...etc... fullBounds: nil color: (Color r: 0.97 g: 0.98 b: 1.0) extension: a MorphExtension (666632192) [eventHandler = an EventHandler] [othe...etc... borderWidth: 0 borderColor: (Color r: 0.03 g: 0.02 b: 0.0) backgroundMorph: nil worldState: a WorldState griddingOn: nil
WorldState>>doOneCycleNowFor: Receiver: a WorldState Arguments and temporary variables: aWorld: a PasteUpMorph(425197568) [world] Receiver's instance variables: hands: an Array(a HandMorph(843055104)) viewBox: 0@0 corner: 1296@875 canvas: a FormCanvas on: RFBDisplayScreen(1296x875x32) damageRecorder: a DamageRecorder stepList: a Heap(StepMessage(#stepAt: -> an OverflowRowMorph(210239488))(an Ove...etc... lastStepTime: 19250 lastStepMessage: nil lastCycleTime: 19271 alarms: a Heap() lastAlarmTime: 19250 menuBuilder: nil
WorldState>>doOneCycleFor: Receiver: a WorldState Arguments and temporary variables: aWorld: a PasteUpMorph(425197568) [world] Receiver's instance variables: hands: an Array(a HandMorph(843055104)) viewBox: 0@0 corner: 1296@875 canvas: a FormCanvas on: RFBDisplayScreen(1296x875x32) damageRecorder: a DamageRecorder stepList: a Heap(StepMessage(#stepAt: -> an OverflowRowMorph(210239488))(an Ove...etc... lastStepTime: 19250 lastStepMessage: nil lastCycleTime: 19271 alarms: a Heap() lastAlarmTime: 19250 menuBuilder: nil
PasteUpMorph>>doOneCycle Receiver: a PasteUpMorph(425197568) [world] Arguments and temporary variables:
Receiver's instance variables: bounds: 0@0 corner: 1296@875 owner: nil submorphs: an Array(a TaskbarMorph(984088576) a SystemWindow(347865088) a Syste...etc... fullBounds: nil color: (Color r: 0.97 g: 0.98 b: 1.0) extension: a MorphExtension (666632192) [eventHandler = an EventHandler] [othe...etc... borderWidth: 0 borderColor: (Color r: 0.03 g: 0.02 b: 0.0) backgroundMorph: nil worldState: a WorldState griddingOn: nil
[[World doOneCycle. Processor yield. false] whileFalse. nil] in Project class>>spawnNewProcess Receiver: Project Arguments and temporary variables:
Receiver's instance variables: superclass: Model methodDict: a MethodDictionary(#beep->(Project>>#beep "a CompiledMethod(3169320...etc... format: 132 instanceVariables: nil organization: ('*sound' beep)
subclasses: nil name: #Project classPool: a Dictionary(#UIProcess->a Process in nil ) sharedPools: nil environment: a SystemDictionary(lots of globals) category: #'System-Support' traitComposition: {} localSelectors: nil
[self value. Processor terminateActive] in BlockClosure>>newProcess Receiver: [[World doOneCycle. Processor yield. false] whileFalse. nil] Arguments and temporary variables:
Receiver's instance variables: outerContext: Project class>>spawnNewProcess startpc: 57 numArgs: 0
--- The full stack --- NonInteractiveUIManager(Object)>>doesNotUnderstand: #openDebuggerOn:context:label:contents:fullView: Debugger class>>openOn:context:label:contents:fullView: [:tool | ^ tool openOn: aProcess context: aContext label: aString contents: contents fullView: aBool] in ToolRegistry>>debug:context:label:contents:fullView: ToolRegistry>>using:do: ToolRegistry>>debug:context:label:contents:fullView: Process>>debug:title:full: [process debug: anError signalerContext title: anError description full: true] in GRPharoPlatform>>openDebuggerOn: WorldState>>runStepMethodsIn: PasteUpMorph>>runStepMethods WorldState>>doOneCycleNowFor: WorldState>>doOneCycleFor: PasteUpMorph>>doOneCycle [[World doOneCycle. Processor yield. false] whileFalse. nil] in Project class>>spawnNewProcess [self value. Processor terminateActive] in BlockClosure>>newProcess