[Pharo-project] The better debugger support by extending an Object protocol

Henrik Johansen henrik.s.johansen at veloxit.no
Mon Sep 7 12:07:54 EDT 2009

Well, if the goal is to be able to differentiate between two objects who
should behave similar in all cases except when you print them while
debugging, I can't really think of any better ways :)

Playing the devil's advocate, here's two things to consider:
- Some people will likely expect *all* proxies to behave like that in a
debugger, enforcing consistent use may be hard.
- Some (other) people will likely see debugPrintOn:, and figure it's
cool to use it for any object they want additional info about at a
glance in a debugger. (not saying that is necessarily a bad thing)

Maybe a good way to clarify its intended usage would be implementing
debugPrintOn: in a  ProxyTrait?
This also ensures a consistent manner for how proxies are distinguished
from the real. (assuming of course, the implementation for different
proxies you were thinking of follows a constant pattern)

Personally, I found inspecting the field to see the actual class of the
object to be of negligible overhead in situations where knowing whether
it's a proxy or a "real" object is really important.
So for me, this change falls in the category "not useful enough that I'd
spend time coding it myself, but useful enough that I'd use it if
available" :)


Igor Stasenko skrev:
> 2009/9/7 Stéphane Ducasse <stephane.ducasse at inria.fr>:
>> good idea!
>> We will add that in pharo if you open a bug item ticket.
>> Stef
> I could add it easily. But first we should make a good expertise, if
> this change is worth doing.
> Because for Object it means a trivial addition of a method, but for
> Debugger/Inspector and other tools
> this could mean a major refactoring and tracing all calls to printing
> methods in order to make sure
> that all of them using new message(s). This could be a big amount of work :)
>> On Sep 7, 2009, at 5:02 PM, Igor Stasenko wrote:
>>> Hello guys,
>>> i'd like to discuss with you an idea of having a specific methods in
>>> Object class for a better and more clever behavior when debugging.
>>> For those of you who are using different kinds of proxies, the main
>>> problem with them that you should override the #printOn:
>>> or #printString methods in order to behave them similar to what
>>> original(proxied) object should be,
>>> but from other side, especially for debugging purposes, this incurs a
>>> major inconvenience, because you often need to differentiate between
>>> the real object and object proxy while debugging. Because if proxy
>>> behaves similar to proxied object while printing, you can't really
>>> make a difference when looking at it.
>>> So, i thought that a nice solution would be to extend an Object
>>> protocol especially for debugging purposes by adding
>>> #debugPrintOn:
>>> method
>>> and change the debugger to use this message, instead of #printOn: for
>>> displaying objects in inspector panels.
>>> Here is the default implementation of
>>> Object>>debugPrintOn: aStream
>>>  ^ self printOn: aStream
>>> And, as you may guess, now the proxy could choose to behave
>>> differently depending on context.
>>> P.S. Maybe i'm missing a point, and there are already the existing
>>> good practices how to get around this.. if so, then please tell me.
>>> --
>>> Best regards,
>>> Igor Stasenko AKA sig.
>>> _______________________________________________
>>> Pharo-project mailing list
>>> Pharo-project at lists.gforge.inria.fr
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project at lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

More information about the Pharo-dev mailing list