!Object methodsFor: 'testing'! test | x | Object class compileString: 'doIt | tmp | tmp := 1. tmp printNl.'. Object doIt. ! doesNotUnderstand: aMessage | n context | context _ thisContext. context receiver class print. n _ 0. ((context receiver isKindOf: String) or: [context receiver isKindOf: Magnitude]) ifTrue: [ ' = ' print. context receiver storeString print ]. ' did not understand selector ' print. aMessage selector print. ' (' print. 1 to: (aMessage arguments size) do: [aMessage arguments print]. ') ' printNl. context := context parentContext. [ context notNil ] whileTrue: [ n _ n + 1. context _ context parentContext ]. context _ thisContext parentContext. n to: 1 by: -1 do: [ :i | context receiver class print. ((context receiver isKindOf: String) or: [context receiver isKindOf: Magnitude]) ifTrue: [ ' = ' print. context receiver storeString print ]. '>>' print. context selector printNl. context _ context parentContext ]. !! !Message methodsFor: 'debugging'! selector ^selector ! arguments ^args !! !BlockContext methodsFor: 'debugging'! callers self inspect. caller notNil ifTrue: [ caller callers ] ! parentContext ^caller ! selector ^selector ! receiver ^'[] in ', home class name !! !MethodContext methodsFor: 'debugging'! callers self inspect. sender notNil ifTrue: [ sender callers ] ! parentContext ^sender ! receiver " ^receiver class name " ^receiver ! sender ^sender ! selector ^selector !! 3 test!