I played around with reverting the method and serializing but that doesn't change anything (the existing BlockClosure is obviously not modified). Then I thought that maybe the method was changed during a running DFSession but still couldn't reproduce.
@Roberto Can you tell us anything about what you did befor / during / after running your session? On 24.05.2013, at 06:44, Max Leske <[email protected]> wrote: > > On 23.05.2013, at 22:58, Camille Teruel <[email protected]> wrote: > >> Hi, >> >> This is indeed strange, the BlockClosure has an incorrect startpc (31 >> instead of 43). You can fix it with: >> theBlock instVar: 2 put: 43. >> The wrong startpc corresponds to the beginning of the block in the previous >> version of the method (DFSession>>#numberOfMethodCalls), but I don't know >> why. > > Would it help to recompile the method? > >> I don't know fuel enough but could it be because the method of the block >> changed between serialization and materialization? > > No, there was never a materialization of that session. > >> >> Camille >> >> On 23 mai 2013, at 21:02, Max Leske wrote: >> >>> Hi Marcus >>> >>> Roberto sent this mail to the Fuel-dev list. When we looked at the problem >>> we noticed that serialization fails because of a corrupt BlockClosure. >>> Since that's not really our territorry Mariano suggested to forward this to >>> you. >>> >>> The image with the corrupt BlockClosure is available here: >>> https://dl.dropboxusercontent.com/u/6281855/DFlow-SubscriptOutOfBounds.zip. >>> To see the stack, right click on the only entry in the right window and >>> click "export session". You'll find the corrupt BlockClosure at >>> BlockClosure>>fuelAccept: >>> >>> @Roberto >>> Is it possible to reproduce the stack with a new session? Or did this only >>> happen once? >>> >>> >>> Cheers, >>> Max >>> >>> >>> Begin forwarded message: >>> >>>> From: Mariano Martinez Peck <[email protected]> >>>> Subject: Re: [Pharo-fuel] [Fuel] SubscriptOutOfBounds: 27 >>>> Date: 23. Mai 2013 14:23:45 MESZ >>>> To: The Fuel Project <[email protected]> >>>> Reply-To: The Fuel Project <[email protected]> >>>> >>>> Indeed, it would be nice if you can known which CompiledMethod and >>>> blockclosure are having the problem. Not only the source code but the real >>>> bytecodes. >>>> Also, can you isolate and just try to serialize them alone and reproduce >>>> the problem? In other words, a reproducible test case? :) >>>> Thanks! >>>> >>>> >>>> On Thu, May 23, 2013 at 8:41 AM, Max Leske <[email protected]> wrote: >>>> What's the compiled method? Is it a special one? Which selector in which >>>> class? >>>> >>>> Max >>>> >>>> On 23.05.2013, at 12:45, "[email protected]" <[email protected]> >>>> wrote: >>>> >>>> > Hi, >>>> > >>>> > While using Fuel in a 2.0 image to serialize some objects (including >>>> > CompiledMethods) I'm getting this error: SubscriptOutOfBounds: 27. >>>> > >>>> > I spent hours in the debugger before writing this email, but I'm not >>>> > able to figure out why this is happening. I attach the full stack of the >>>> > error (STACK#1). >>>> > >>>> > I understood that it has something to do with a particular >>>> > CompiledMethod in my image and/or a BlockClosure which for some reason >>>> > cannot be printed (i.e., the printString returns <error in printString: >>>> > evaluate "self printString" to debug>) and when I try to printString to >>>> > debug I got the STACK#2 which in turn does not bring me to any possible >>>> > solution. >>>> > >>>> > Hope some of you will have an intuition on that or at least tell me >>>> > where to look or how to script a possible workaround. >>>> > >>>> > Thanks in advance, >>>> > Roby >>>> > >>>> > ############################################################################################ >>>> > ######################################### STACK#1 >>>> > ########################################### >>>> > ########################################################################################### >>>> > CompiledMethod(Object)>>errorSubscriptBounds: >>>> > CompiledMethod(Object)>>at: >>>> > InstructionStream>>interpretNextInstructionFor: >>>> > CompiledMethod>>abstractBytecodeMessageAt: in Block: [(InstructionStream >>>> > new method: self pc: pc)... >>>> > BlockClosure>>on:do: >>>> > CompiledMethod>>abstractBytecodeMessageAt: >>>> > BlockClosure>>blockCreationBytecodeMessage >>>> > BlockClosure>>endPC >>>> > BlockClosure>>abstractBytecodeMessagesDo: >>>> > BlockClosure>>isClean >>>> > BlockClosure>>shouldBeSubstitutedByCleanCopy >>>> > BlockClosure>>fuelAccept: >>>> > FLFullGeneralMapper(FLLightGeneralMapper)>>mapAndTrace: >>>> > FLFullGlobalMapper>>mapAndTrace: in Block: [(anObject class == >>>> > CompiledMethod... >>>> > FLLargeIdentityDictionary>>at:ifAbsent: >>>> > FLFullGlobalMapper>>mapAndTrace: >>>> > FLPluggableSubstitutionMapper>>mapAndTrace: >>>> > FLPluggableSubstitutionMapper>>mapAndTrace: >>>> > FLAnalysis>>mapAndTrace: >>>> > FLAnalysis>>run >>>> > FLAnalyzer>>setDefaultAnalysis in Block: [:anObject | (FLAnalysis... >>>> > FLAnalyzer>>analysisFor: >>>> > FLSerialization>>analysisStep >>>> > FLSerialization>>run >>>> > DFSerializer(FLSerializer)>>setDefaultSerialization in Block: [:anObject >>>> > :anEncoder | (FLSerialization... >>>> > DFSerializer(FLSerializer)>>serialize:on: in Block: [:anEncoder | ... >>>> > FLEncoder class>>on:globalEnvironment:do: in Block: [aBlock value: >>>> > anEncoder] >>>> > BlockClosure>>ensure: >>>> > FLEncoder class>>on:globalEnvironment:do: >>>> > DFSerializer(FLSerializer)>>serialize:on: >>>> > >>>> > >>>> > ############################################################################################ >>>> > ######################################### STACK#2 >>>> > ########################################### >>>> > ############################################################################################ >>>> > Decompiler(Object)>>error: >>>> > Decompiler>>decompileBlock: >>>> > BlockClosure>>decompile >>>> > BlockClosure>>printOn: >>>> > BlockClosure(Object)>>printStringLimitedTo: in Block: [:s | self >>>> > printOn: s] >>>> > String class(SequenceableCollection class)>>streamContents:limitedTo: >>>> > BlockClosure(Object)>>printStringLimitedTo: >>>> > BlockClosure(Object)>>printString >>>> > BlockClosure>>DoIt >>>> > Compiler>>evaluate:in:to:notifying:ifFail:logged: >>>> > SmalltalkEditor>>evaluateSelectionAndDo: in Block: [rcvr class >>>> > evaluatorClass new... >>>> > BlockClosure>>on:do: >>>> > SmalltalkEditor>>evaluateSelectionAndDo: >>>> > SmalltalkEditor>>evaluateSelection >>>> > PluggableTextMorph>>doIt in Block: [textMorph editor evaluateSelection] >>>> > PluggableTextMorph>>handleEdit: in Block: [result := editBlock value] >>>> > TextMorphForEditView(TextMorph)>>handleEdit: >>>> > PluggableTextMorph>>handleEdit: >>>> > PluggableTextMorph>>doIt >>>> > SmalltalkEditor class>>buildSmalltalkEditorKeymappingsOn: in Block: >>>> > [:morph | morph doIt] >>>> > BlockClosure>>cull: >>>> > BlockClosure>>cull:cull: >>>> > BlockClosure>>cull:cull:cull: >>>> > KMCategoryTarget>>completeMatch:buffer: >>>> > KMKeymap>>notifyCompleteMatchTo:buffer: in Block: [:l | l completeMatch: >>>> > self buffer: aBuffer] >>>> > Array(SequenceableCollection)>>do: >>>> > KMKeymap>>notifyCompleteMatchTo:buffer: >>>> > KMKeymap>>onMatchWith:notify:andDo: >>>> > KMCategory>>onMatchWith:notify:andDo: in Block: [:entry | entry... >>>> > Set>>do: >>>> > >>>> > >>>> > >>>> > _______________________________________________ >>>> > Pharo-fuel mailing list >>>> > [email protected] >>>> > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-fuel >>>> >>>> _______________________________________________ >>>> Pharo-fuel mailing list >>>> [email protected] >>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-fuel >>>> >>>> >>>> >>>> -- >>>> Mariano >>>> http://marianopeck.wordpress.com >>>> _______________________________________________ >>>> Pharo-fuel mailing list >>>> [email protected] >>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-fuel >>> >> >
