[squeak-dev] Debugger bug: disappearing contents

Frank Shearar frank.shearar at angband.za.org
Sat Nov 13 17:35:17 UTC 2010


I've been chasing down a strange bug these past few days: 

The executive summary is this: when viewing a method in the debugger 
that refers to an instvar deleted after the Debugger instantiated, the 
CodePane shows the correct source for a fraction of a second, and then 
goes blank.

What I'd expected to see was the source of the method rendered as per 
usual, and the reference to the missing instvar coloured red, to 
indicate a problem. (Just like what you'd see if you opened up a Browser 
on the method.)

The CodePane goes blank because the Debugger's contents instvar is 
nilled out.

CodeHolder>>setContentsToForceRefresh nils the instvar because 
CodeHolder>>didCodeChangeElsewhere returns true.

That method returns true because the Debugger's currentCompiledMethod 
instvar and the compiled method according to "aClass compiledMethodAt: 
aSelector" aren't the same object.

And now I'm a bit stuck. I know the behaviour I'd expect, I know why the 
bug's happening, but how do I fix it? Does CodeHolder (or Debugger) need 
a better way of knowing whether the viewed method's changed? (For 
instance, comparing the two CompiledMethods' asCommaString shows 
identical contents.)


More information about the Squeak-dev mailing list