[Pharo-project] Breakpoints (was [OT] Great job guys)
siguctua at gmail.com
Fri Jan 9 06:08:55 EST 2009
Btw, with this trick its not necessary to break before invocation of method.
You can put break just after method returns.
Think , how powerfull it can be:
BreakPointAgent breakOnLeave: #isString class: Object condition:
[:receiver :arguments: :result |
Transcript show: receiver printString, '>>isString returns: ',
result asString; cr.
false "do not break"
2009/1/9 Igor Stasenko <siguctua at gmail.com>:
> 2009/1/9 Janko Mivšek <janko.mivsek at eranova.si>:
>> Dale Henrichs wrote:
>>> ----- "Janko Mivšek" <janko.mivsek at eranova.si> wrote:
>>> | And when you are already doing that, introduce also breakpoints back in
>>> | Pharo as they are on GLASS GemTools. Very intuitive and the same as on
>>> | most other Smalltalks. If they can be supported in GemTools, why
>>> | aren't yet in Pharo? Any technical reason?
>>> Breakpoints in GLASS/GemTools are taking advantage of the breakpoint feature in the GemStone/S VM. Remember, Squeak/Pharo are used as an OmniBrowser client for GLASS -- the debugger is running in a GemStone vm and the UI is running in the Squeak/Pharo vm.
>> What I like about breakpoints in GemTools is the simplicity from
>> usability standpoint. And similarity of use to other Smalltaltalks.
>> And because their UI part is implemented in OmniBrowser on GemTools,
>> they should be easily ported back to Pharo OmniBrowser, even that
>> breakpoints in GS/S are implemented differently than in Squeak.
>> In other words, let we port the UI for breakpoints first, on top of
>> whatever Squeak supports for breakpoints currently. Later breakpoints
>> can be enhanced on VM level as well.
> There is no need in any enhancement from VM side.
> Here attached the scratch implementation of breakpoints for squeak,
> took about 15 minutes to implement.
> BreakPointAgent class:<yourclass> selector: <yourselector> "will
> install a breakpoint on that method"
> BreakPointAgent removeAll "remove all breaks from system"
> BreakPointTestClass test " a simple test " :)
> now you can subclass it and create a conditional breakpoints, which
> will halt only if some criteria met.
> It is trivial to add new ivar (criteriaBlock) and change
> run: aSelector with: arguments in: aReceiver
> to halt only if criteriaBlock evaluates to true.
> There is No limits to fantasy :)
> To not hide the actual method (when browsing) BreakPointAgent could be
> extended to act as a proxy while it active e.g. simply redirect
> messages like #literals and so on to compiled method it replaced.
>> Janko Mivšek
>> Smalltalk Web Application Server
>> Pharo-project mailing list
>> Pharo-project at lists.gforge.inria.fr
> Best regards,
> Igor Stasenko AKA sig.
Igor Stasenko AKA sig.
More information about the Pharo-dev