<div dir="ltr">Hi Chris,<br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jul 6, 2015 at 9:05 AM, Chris Muller <span dir="ltr">&lt;<a href="mailto:asqueaker@gmail.com" target="_blank">asqueaker@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Could someone teach me about breakpoints?  I&#39;ve only ever done<br>
&quot;breakpoints&quot; by inserting a old-school send to #halt, I&#39;m not<br>
familiar with these new ways of interrupting execution.  How are they<br>
done and what is the advantage over halt?<br></blockquote><div><br></div><div>The &quot;toggle breakpoint on entry&quot; takes care of inserting the break and running the compile, or undoing the break, in one menu selection.  So it&#39;s faster than using halt.  Also, it does not disturb the current change set (it is not considered a change), nor does it create a version of the method nor leave source on the changes file.  So it&#39;s cleaner.  Now that it preserves source I prefer it to halt.  Previously it used to install a breakpointed method with decompiled source, which was horrible if one wanted to read comments or had trouble with the formatting.</div><div><br></div><div>WrappedBreakpoint is a step towards a more complete debugging package, but it isn&#39;t used yet.</div><div><br></div><div>As a somewhat relevant aside, Terry Raymond of Crafted Smalltalk implemented the Professional Debug Package for VisualWorks which provides conditional breakpoints along with a comprehensive UI.  It&#39;s powerful and nice to use.  While it&#39;s relatively easy to roll your own conditional breakpoints above halt, it&#39;s nice not to have to think about it to heavily (it&#39;s easy to make a mistake and the effects can be terminal :-) ).  Perhaps we&#39;ll evolve BreakpointManager in that direction.  For example, adding a &quot;toggle one-shot breakpoint&quot;would be easy to add; for example inserting breakonce instead of break could cause the breakpointed method to be uninstalled immediately.</div><div>  </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5"><br>
On Mon, Jul 6, 2015 at 11:01 AM, Tobias Pape &lt;<a href="mailto:Das.Linux@gmx.de">Das.Linux@gmx.de</a>&gt; wrote:<br>
&gt;<br>
&gt; On 06.07.2015, at 17:54, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt; Hi Tobias,<br>
&gt;&gt;<br>
&gt;&gt; On Jul 6, 2015, at 8:07 AM, Tobias Pape &lt;<a href="mailto:Das.Linux@gmx.de">Das.Linux@gmx.de</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; Hi Eliot<br>
&gt;&gt;&gt; On 06.07.2015, at 15:40, Eliot Miranda &lt;<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Hi Tobias,<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; there /are/ configurations.  Two if then :-(.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Sorry, it was just a guess because of the stack trace.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; So, I investigated.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;   update-eem.319.mcm:<br>
&gt;&gt;&gt;       (CompiledMethod methodDict includesKay: #hasBreakpoint) &quot;true&quot;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;       CompiledMethod&gt;&gt;#hasBreakpoint<br>
&gt;&gt;&gt;           ^BreakpointManager methodHasBreakpoint: self<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;   update-eem.320.mcm:<br>
&gt;&gt;&gt;       (CompiledMethod methodDict includesKey: #hasBreakpoint) &quot;true&quot;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;       CompiledMethod&gt;&gt;#hasBreakpoint<br>
&gt;&gt;&gt;           ^false<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;   update-eem.320.mcm:<br>
&gt;&gt;&gt;       (CompiledMethod methodDict includesKey: #hasBreakpoint) &quot;true&quot;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;       CompiledMethod&gt;&gt;#hasBreakpoint<br>
&gt;&gt;&gt;           ^false<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;   Kernel-eem.934<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;       (CompiledMethod methodDict includesKey: #hasBreakpoint)  &quot;false&quot;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Ahaa.<br>
&gt;&gt;&gt; System misses to use an actual override and monticello thought the method had gone<br>
&gt;&gt;&gt; when it was saved for Kernel-eem.934.<br>
&gt;&gt;&gt; Soo:<br>
&gt;&gt;&gt;   Kernel-topa.935: Reinstall CompiledMethod&gt;&gt;#hasBreakpoint<br>
&gt;&gt;&gt;   System-topa.753: Reinstall CompiledMethod&gt;&gt;#hasBreakpoint as an Override<br>
&gt;&gt;&gt; Jenkins seems to be happy:<br>
&gt;&gt;&gt;   <a href="http://build.squeak.org/job/SqueakTrunk/1549/console" rel="noreferrer" target="_blank">http://build.squeak.org/job/SqueakTrunk/1549/console</a><br>
&gt;&gt;&gt;   <a href="http://build.squeak.org/job/SqueakTrunk/1549/" rel="noreferrer" target="_blank">http://build.squeak.org/job/SqueakTrunk/1549/</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I hope this fits everyones :)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Best regards<br>
&gt;&gt;&gt;   -Tobias<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; PS: Have you looked at WrappedBreakpoint?<br>
&gt;&gt;<br>
&gt;&gt; No.  I&#39;ll try and take a look.  What do you think the issue is?<br>
&gt;<br>
&gt; No issue, just an alternative way of doing breakpoints<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt;&gt; Eliot (phone)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Jul 6, 2015, at 3:03 AM, Tobias Pape &lt;<a href="mailto:Das.Linux@gmx.de">Das.Linux@gmx.de</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Hi,<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; we might need a configuration for Eliot&#39;s recent #hasBreakpoint changes,<br>
&gt;&gt;&gt;&gt;&gt; the CI (and probably any update process) chokes on this:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; 2015-07-06T11:27:54.732+01:00: Installing Kernel-eem.934<br>
&gt;&gt;&gt;&gt;&gt; vvvvvvvvvvvvvvvvvv MessageNotUnderstood: CompiledMethod&gt;&gt;hasBreakpoint vvvvvvvvvvvvvvvvvv<br>
&gt;&gt;&gt;&gt;&gt; The time is 2015-07-06T11:27:54.848+01:00<br>
&gt;&gt;&gt;&gt;&gt; CompiledMethod(Object)&gt;&gt;doesNotUnderstand: #hasBreakpoint<br>
&gt;&gt;&gt;&gt;&gt; MCMcmUpdater class(ClassDescription)&gt;&gt;logMethodSource:forMethodWithNode:inCategory:withStamp:notifying:<br>
&gt;&gt;&gt;&gt;&gt; MethodAddition&gt;&gt;writeSourceToLog<br>
&gt;&gt;&gt;&gt;&gt; MethodAddition&gt;&gt;createCompiledMethod<br>
&gt;&gt;&gt;&gt;&gt; [] in [] in [] in [] in [] in MCPackageLoader&gt;&gt;basicLoad<br>
&gt;&gt;&gt;&gt;&gt; [] in [] in OrderedCollection(Collection)&gt;&gt;do:displayingProgress:every:<br>
&gt;&gt;&gt;&gt;&gt; OrderedCollection&gt;&gt;do:<br>
&gt;&gt;&gt;&gt;&gt; [] in OrderedCollection(Collection)&gt;&gt;do:displayingProgress:every:<br>
&gt;&gt;&gt;&gt;&gt; [] in [] in MorphicUIManager&gt;&gt;displayProgress:at:from:to:during:<br>
&gt;&gt;&gt;&gt;&gt; BlockClosure&gt;&gt;on:do:<br>
&gt;&gt;&gt;&gt;&gt; [] in MorphicUIManager&gt;&gt;displayProgress:at:from:to:during:<br>
&gt;&gt;&gt;&gt;&gt; BlockClosure&gt;&gt;ensure:<br>
&gt;&gt;&gt;&gt;&gt; MorphicUIManager&gt;&gt;displayProgress:at:from:to:during:<br>
&gt;&gt;&gt;&gt;&gt; ProgressInitiationException&gt;&gt;defaultResumeValue<br>
&gt;&gt;&gt;&gt;&gt; ProgressInitiationException(Exception)&gt;&gt;resume<br>
&gt;&gt;&gt;&gt;&gt; [] in [] in UndefinedObject&gt;&gt;DoIt<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Best regards<br>
&gt;&gt;&gt;&gt;&gt; -Tobias<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">best,<div>Eliot</div></div>
</div></div>