I think it is a reasonable approach. GemStone has a few debugger
switches which affect the debugging of proxies ( at least stubs) so I
mention that since it is a similar area. Where your extension perhaps
wouldn't scale is if this became an enthusiastic growth of API if you
found other useful things to do as well.

Another way to look at it would be to implement a per process or
dynamic variable that objects could access like
self debuggingContext
where the object could find out about it's current execution
environment. In your proxy objects you would access this in the print
method. I'm not sure if it is a good idea or not but such an object
could then hold onto more complex state. Eg stub debugging, print
policy, debugging replication specs etc. Just a thought

cheers mike

On Monday, September 7, 2009, Igor Stasenko <siguc...@gmail.com> wrote:
> 2009/9/7 Peter Hugosson-Miller <oldmanl...@gmail.com>:
>> On 7 sep 2009, at 17.02, Igor Stasenko <siguc...@gmail.com> 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@lists.gforge.inria.fr
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>> Just one thing: maybe the default implementation could wrap that call
>> to #printOn: in an exception handler, in case one is in the process of
>> debugging a #printOn: method. The exception could just swallow all
>> errors and return a String like 'Receiver cannot be printed' or similar.
>>
>
> AFAIK, debugger already having a work-arounds for this, so if
> #printOn: throws an exception
> it displays a reddish string , "object can't be printed, try debug
> object printString" or similar.
>
> What is interesting about that, that at some point, the source of such
> errors could be that an object which you
> trying to print is not fully initialized because developer do not
> expected the usage of #printString at early stages of object
> initialization, but this often happens in Debugger when you evaluating
> the code step-by-step.
> This just another case, where separate #debugPrintOn: could be useful.
>
> But i don't want to make it too clever in the Object, as you
> proposing, instead, i think it should be plain stupid and act as an
> entry point, while one who overriding this message
> could make sure that #debugPrintOn: never throws an exception... But
> still, this doesn't means that debugger should not care about such
> things by itself.
>
>> --
>> Cheers,
>> Peter
>>
>> _______________________________________________
>> Pharo-project mailing list
>> Pharo-project@lists.gforge.inria.fr
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>
>
>
> --
> Best regards,
> Igor Stasenko AKA sig.
>
> _______________________________________________
> Pharo-project mailing list
> Pharo-project@lists.gforge.inria.fr
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

_______________________________________________
Pharo-project mailing list
Pharo-project@lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to