On Sat, Jan 31, 2015 at 8:44 AM, Eliot Miranda <eliot.mira...@gmail.com>
wrote:

>
>
> On Fri, Jan 30, 2015 at 2:54 PM, Sean P. DeNigris <s...@clipperadams.com>
> wrote:
>
>> Ben Coman wrote
>> > @Sean,  In what way will it make halts more annoying?
>>
>> Clearly seems to make things better in your use case, but IIRC the purpose
>> of that test is that you don't want to open the debugger within the
>> halting
>> system. And indeed, when you remove it, you end up in #halt. But where you
>> want to be is in UndefinedObject>>DoIt. So, it seems like a hack that,
>> while
>> better in this case, may have implications in other cases. The solution
>> we're looking for is: "debuggers-opened-due-to-halts always open on the
>> first context totally outside the halt machinery" and we're not quite
>> there
>> yet.
>>
>
Okay I agree. So I threw away that solution you commented on and came at it
another way.  In summary...

* The following four statements now all operate identically
  * self halt.
  * self haltOnce.
  * Halt now.
  * Halt once.

* The first time the debugger opens - the halt statement is highlighted in
the method that contains it.
(In addition, the several other conditional and counting halt methods in
the Halt class protocol 'halting' and Object protocol
'*Kernel-Exceptions-debugging' "should" also work identically - but I
haven't tested them pending confirmation I'm on the right track)

* Upon <Restart>, all the above statements are properly ignored by <Step
Over>

Consider the following now opens a debugger on line 2 and gets to line 5 in
just three <Step Over>s.

a := 1.
self halt.
b := 2.
self halt.
c := 3.



>
> Nobody responded to my suggestion of inlining the code for haltOnce so
> that the Halt signal happens in haltOnce itself, just as it does inside
> halt.  This may make the system respond to haltOnce the same as it does to
> halt.  i.e. the debugger can look to the sender of the signalling context.
> As it is now, the sender of the signalling context of a haltOnce is halt,
> not the sender of haltOnce as desired.
>
>
> Let me reiterate, I expect
>
> haltOnce
> "Halt unless we have already done it once."
> (Smalltalk at: #HaltOnce ifAbsent: [false]) ifTrue:
> [Smalltalk at: #HaltOnce put: false.
> Halt signal]
>
> will behave similarly to
>
> halt
> Halt signal
>
>
>
I believe I have been successful in this. The following now opens a
debugger on line 3 instead of inside the #haltOnce....

a := 1.
Halt enableHaltOnce.
self haltOnce.
b := 2.


This is all in SLICE-Issue-12970-16-steps-to-get-through-halt-BenComan.4.
Now maybe its not the best implementation, but I believe it satisfies all
functional requirements and please can it be reviewed for integration asap.
For me this adds that much more joy to using our great debugger.

cheers -ben

Reply via email to