Skip to content

MNU in debugger and breakpoint browser if there is a method breakpoint in an unbound method #1

@martinmcclure

Description

@martinmcclure

If the gem has in memory a method breakpoint in an unbound method, Jadeite breakpoint browsers and debuggers will fail with an MNU in RowanQueryService >> methodServicesFrom:.
To reproduce, execute in Jadeite

| method |

method :=
     '' _compileInContext: nil
          symbolList: GsCurrentSession currentSession symbolList.

method setBreakAtStepPoint: 1.

^ method

then open a debugger or breakpoint browser. The resulting stack is below. The cause appears to be that the breakpoint is in a method whose class is nil, and nil is being sent #thisClass.

To see this failure the server must be recent enough 3.7 to have the fix for bug 49650, which caused an earlier MNU but was fixed a month ago.

A very similar issue in GBS was reported as bug 49682, and subsequently fixed to list the class as "nil."

a MessageNotUnderstood occurred (error 2010), a UndefinedObject does not understand  #'thisClass'

[1] MessageNotUnderstood >> defaultAction @10 line 7
[2] MessageNotUnderstood (AbstractException) >> _defaultAction @4 line 4
[3] MessageNotUnderstood (AbstractException) >> _signalWith: @5 line 25
[4] MessageNotUnderstood (AbstractException) >> signal @2 line 47
[5] UndefinedObject (Object) >> doesNotUnderstand: @9 line 10
[6] UndefinedObject (Object) >> _doesNotUnderstand:args:envId:reason: @8 line 14
[7] [] in RowanQueryService >> methodServicesFrom: @25 line 6
[8] Array (SequenceableCollection) >> collect: @9 line 16
[9] RowanQueryService >> methodServicesFrom: @4 line 5
[10] RowanQueryService >> basicBreakpointMethods @8 line 6
[11] RowanAnsweringService >> disableAllBreaks @4 line 5
[12] RowanAnsweringService >> setBreakPointsAreEnabled: @4 line 4
[13] RowanAnsweringService (Object) >> perform:withArguments: @1 line 12
[14] RowanAnsweringService (RowanService) >> servicePerform:withArguments: @7 line 14
[15] [] in JadeServer >> updateFromSton: @35 line 13
[16] OrderedCollection (Collection) >> do: @5 line 10
[17] [] in JadeServer >> updateFromSton: @24 line 9
[18] ExecBlock0 (ExecBlock) >> on:do: @3 line 44
[19] [] in JadeServer >> updateFromSton: @12 line 14
[20] ExecBlock0 (ExecBlock) >> on:do: @3 line 44
[21] JadeServer64bit35 (JadeServer) >> updateFromSton: @2 line 23
[22] GsNMethod class >> _gsReturnToC @1 line 11
===============================================
[1] MessageNotUnderstood >> defaultAction @10 line 7
	receiver oop(29624321) == a MessageNotUnderstood occurred (error 2010), a UndefinedObject does not understand  #'thisClass'

instance variables:
	-currGsHandler oop(20) == nil
	-envId oop(2) == 0
	-gsArgs oop(29624577) == anArray( )
	-gsDetails oop(20) == nil
	-gsNumber oop(16082) == 2010
	-gsReason oop(20) == nil
	-gsResumable oop(268) == true
	-gsStack oop(20) == nil
	-gsTrappable oop(268) == true
	-messageText oop(29607169) == 'a MessageNotUnderstood occurred (error 2010), a UndefinedObject does not understand  #''thisClass'''
	-receiver oop(20) == nil
	-selector oop(2810625) == #'thisClass'
	-tag oop(20) == nil

temporary variables and parameters:
	blk oop(20) == nil
	res oop(20) == nil
----------------------------------------------------
[2] MessageNotUnderstood (AbstractException) >> _defaultAction @4 line 4
	receiver oop(29624321) == a MessageNotUnderstood occurred (error 2010), a UndefinedObject does not understand  #'thisClass'

instance variables:
	-currGsHandler oop(20) == nil
	-envId oop(2) == 0
	-gsArgs oop(29624577) == anArray( )
	-gsDetails oop(20) == nil
	-gsNumber oop(16082) == 2010
	-gsReason oop(20) == nil
	-gsResumable oop(268) == true
	-gsStack oop(20) == nil
	-gsTrappable oop(268) == true
	-messageText oop(29607169) == 'a MessageNotUnderstood occurred (error 2010), a UndefinedObject does not understand  #''thisClass'''
	-receiver oop(20) == nil
	-selector oop(2810625) == #'thisClass'
	-tag oop(20) == nil

temporary variables and parameters:
	res oop(20) == nil
----------------------------------------------------
[3] MessageNotUnderstood (AbstractException) >> _signalWith: @5 line 25
	receiver oop(29624321) == a MessageNotUnderstood occurred (error 2010), a UndefinedObject does not understand  #'thisClass'

instance variables:
	-currGsHandler oop(20) == nil
	-envId oop(2) == 0
	-gsArgs oop(29624577) == anArray( )
	-gsDetails oop(20) == nil
	-gsNumber oop(16082) == 2010
	-gsReason oop(20) == nil
	-gsResumable oop(268) == true
	-gsStack oop(20) == nil
	-gsTrappable oop(268) == true
	-messageText oop(29607169) == 'a MessageNotUnderstood occurred (error 2010), a UndefinedObject does not understand  #''thisClass'''
	-receiver oop(20) == nil
	-selector oop(2810625) == #'thisClass'
	-tag oop(20) == nil

temporary variables and parameters:
	inCextensionArg oop(20) == nil
	res oop(20) == nil
----------------------------------------------------
[4] MessageNotUnderstood (AbstractException) >> signal @2 line 47
	receiver oop(29624321) == a MessageNotUnderstood occurred (error 2010), a UndefinedObject does not understand  #'thisClass'

instance variables:
	-currGsHandler oop(20) == nil
	-envId oop(2) == 0
	-gsArgs oop(29624577) == anArray( )
	-gsDetails oop(20) == nil
	-gsNumber oop(16082) == 2010
	-gsReason oop(20) == nil
	-gsResumable oop(268) == true
	-gsStack oop(20) == nil
	-gsTrappable oop(268) == true
	-messageText oop(29607169) == 'a MessageNotUnderstood occurred (error 2010), a UndefinedObject does not understand  #''thisClass'''
	-receiver oop(20) == nil
	-selector oop(2810625) == #'thisClass'
	-tag oop(20) == nil

temporary variables and parameters:
----------------------------------------------------
[5] UndefinedObject (Object) >> doesNotUnderstand: @9 line 10
	receiver oop(20) == nil

instance variables:

temporary variables and parameters:
	aMessageDescriptor oop(28277761) == thisClass
	args oop(29624577) == anArray( )
	ex oop(29624321) == a MessageNotUnderstood occurred (error 2010), a UndefinedObject does not understand  #'thisClass'
	sel oop(2810625) == #'thisClass'
----------------------------------------------------
[6] UndefinedObject (Object) >> _doesNotUnderstand:args:envId:reason: @8 line 14
	receiver oop(20) == nil

instance variables:

temporary variables and parameters:
	anArray oop(29624577) == anArray( )
	aSmallInt oop(2) == 0
	aSymbol oop(2810625) == #'thisClass'
	dnuKind oop(2) == 0
----------------------------------------------------
[7] [] in RowanQueryService >> methodServicesFrom: @25 line 6
	receiver oop(29527809) == anExecBlock1

instance variables:

temporary variables and parameters:
	gsNMethod oop(29603073) == GsNMethod <nil>>><anonymous>
	self oop(29521921) == aRowanQueryService
----------------------------------------------------
[8] Array (SequenceableCollection) >> collect: @9 line 16
	receiver oop(29528065) == anArray( GsNMethod <nil>>><anonymous>)

instance variables:

temporary variables and parameters:
	aBlock oop(29527809) == anExecBlock1
	i oop(10) == 1
	mySize oop(10) == 1
	result oop(29606401) == anArray( nil)
----------------------------------------------------
[9] RowanQueryService >> methodServicesFrom: @4 line 5
	receiver oop(29521921) == aRowanQueryService

instance variables:
	-command oop(20) == nil
	-commandArgs oop(20) == nil
	-definition oop(20) == nil
	-organizer oop(29619201) == aClassOrganizer
	-queryResults oop(20) == nil
	-updates oop(20) == nil
	-updateType oop(20) == nil

temporary variables and parameters:
	methods oop(29528065) == anArray( GsNMethod <nil>>><anonymous>)
	sorted oop(29619457) == aSortedCollection( )
----------------------------------------------------
[10] RowanQueryService >> basicBreakpointMethods @8 line 6
	receiver oop(29521921) == aRowanQueryService

instance variables:
	-command oop(20) == nil
	-commandArgs oop(20) == nil
	-definition oop(20) == nil
	-organizer oop(29619201) == aClassOrganizer
	-queryResults oop(20) == nil
	-updates oop(20) == nil
	-updateType oop(20) == nil

temporary variables and parameters:
	bpArray oop(29632001) == anArray( anArray( 1, nil, nil, 1, GsNMethod <nil>>><anonymous>, false, 0))
	bpMethods oop(29528065) == anArray( GsNMethod <nil>>><anonymous>)
----------------------------------------------------
[11] RowanAnsweringService >> disableAllBreaks @4 line 5
	receiver oop(28277249) == aRowanAnsweringService

instance variables:
	-answer oop(268) == true
	-command oop(39287041) == #'setBreakPointsAreEnabled:'
	-commandArgs oop(28274177) == anArray( false)
	-definition oop(20) == nil
	-organizer oop(29619201) == aClassOrganizer
	-updates oop(20) == nil
	-updateType oop(20) == nil

temporary variables and parameters:
	methodServices oop(20) == nil
----------------------------------------------------
[12] RowanAnsweringService >> setBreakPointsAreEnabled: @4 line 4
	receiver oop(28277249) == aRowanAnsweringService

instance variables:
	-answer oop(268) == true
	-command oop(39287041) == #'setBreakPointsAreEnabled:'
	-commandArgs oop(28274177) == anArray( false)
	-definition oop(20) == nil
	-organizer oop(29619201) == aClassOrganizer
	-updates oop(20) == nil
	-updateType oop(20) == nil

temporary variables and parameters:
	boolean oop(12) == false
----------------------------------------------------
[13] RowanAnsweringService (Object) >> perform:withArguments: @1 line 12
	receiver oop(28277249) == aRowanAnsweringService

instance variables:
	-answer oop(268) == true
	-command oop(39287041) == #'setBreakPointsAreEnabled:'
	-commandArgs oop(28274177) == anArray( false)
	-definition oop(20) == nil
	-organizer oop(29619201) == aClassOrganizer
	-updates oop(20) == nil
	-updateType oop(20) == nil

temporary variables and parameters:
	anArray oop(28274177) == anArray( false)
	aSelectorSymbol oop(39287041) == #'setBreakPointsAreEnabled:'
----------------------------------------------------
[14] RowanAnsweringService (RowanService) >> servicePerform:withArguments: @7 line 14
	receiver oop(28277249) == aRowanAnsweringService

instance variables:
	-answer oop(268) == true
	-command oop(39287041) == #'setBreakPointsAreEnabled:'
	-commandArgs oop(28274177) == anArray( false)
	-definition oop(20) == nil
	-organizer oop(29619201) == aClassOrganizer
	-updates oop(20) == nil
	-updateType oop(20) == nil

temporary variables and parameters:
	collection oop(28274177) == anArray( false)
	symbol oop(39287041) == #'setBreakPointsAreEnabled:'
----------------------------------------------------
[15] [] in JadeServer >> updateFromSton: @35 line 13
	receiver oop(28267521) == anExecBlock1

instance variables:

temporary variables and parameters:
	organizer oop(29619201) == aClassOrganizer
	service oop(28277249) == aRowanAnsweringService
----------------------------------------------------
[16] OrderedCollection (Collection) >> do: @5 line 10
	receiver oop(28267265) == anOrderedCollection( aRowanLoggingService, aRowanAnsweringService)

instance variables:

temporary variables and parameters:
	aBlock oop(28267521) == anExecBlock1
	i oop(18) == 2
----------------------------------------------------
[17] [] in JadeServer >> updateFromSton: @24 line 9
	receiver oop(28264193) == anExecBlock0

instance variables:

temporary variables and parameters:
	services oop(28267265) == anOrderedCollection( aRowanLoggingService, aRowanAnsweringService)
----------------------------------------------------
[18] ExecBlock0 (ExecBlock) >> on:do: @3 line 44
	receiver oop(28264193) == anExecBlock0

instance variables:

temporary variables and parameters:
	exceptionSelector oop(29437185) == GsInteractionRequest
	fastPath oop(268) == true
	handlerBlock oop(28262145) == anExecBlock
----------------------------------------------------
[19] [] in JadeServer >> updateFromSton: @12 line 14
	receiver oop(28261121) == anExecBlock0

instance variables:

temporary variables and parameters:
	organizer oop(29619201) == aClassOrganizer
	resultString oop(20) == nil
	self oop(30009345) == aJadeServer64bit35
	services oop(28267265) == anOrderedCollection( aRowanLoggingService, aRowanAnsweringService)
	stonString oop(29622017) == 'OrderedCollection[RowanLoggingService{#command:#logReceivedServices,#commandArgs:[],#id:0,#groupId:311,#services:OrderedCollection[RowanAnsweringService{#command:#''setBreakPointsAreEnabled:'',#comma...
----------------------------------------------------
[20] ExecBlock0 (ExecBlock) >> on:do: @3 line 44
	receiver oop(28261121) == anExecBlock0

instance variables:

temporary variables and parameters:
	exceptionSelector oop(130817) == Error
	fastPath oop(268) == true
	handlerBlock oop(69536769) == anExecBlock1
----------------------------------------------------
[21] JadeServer64bit35 (JadeServer) >> updateFromSton: @2 line 23
	receiver oop(30009345) == aJadeServer64bit35

instance variables:
	-classList oop(20) == nil
	-classOrganizers oop(28257793) == anArray( nil, nil, nil, nil)
	-environment oop(2) == 0
	-methodCommandResult oop(20) == nil
	-methodFilters oop(20) == nil
	-methodFilterType oop(20) == nil
	-readStream oop(20) == nil
	-selectedClass oop(20) == nil
	-selections oop(20) == nil
	-writeStream oop(20) == nil

temporary variables and parameters:
	organizer oop(29619201) == aClassOrganizer
	resultString oop(20) == nil
	services oop(28267265) == anOrderedCollection( aRowanLoggingService, aRowanAnsweringService)
	stonString oop(29622017) == 'OrderedCollection[RowanLoggingService{#command:#logReceivedServices,#commandArgs:[],#id:0,#groupId:311,#services:OrderedCollection[RowanAnsweringService{#command:#''setBreakPointsAreEnabled:'',#comma...
----------------------------------------------------
[22] GsNMethod class >> _gsReturnToC @1 line 11
	receiver oop(144897) == GsNMethod

instance variables:

temporary variables and parameters:

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions