<div dir="ltr">Thanks. And ... thanks for the new lets-not-shoot-ourselves-in-the-foot update. :)</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Mar 13, 2023 at 6:56 PM Juan Vuletich <<a href="mailto:juan@cuis.st">juan@cuis.st</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>

  
    
    
  
  <div bgcolor="#ffffff">
    On 3/13/2023 6:05 PM, Alexandre Rousseau via Cuis-dev wrote:
    <blockquote type="cite">
      <div dir="ltr">This helps, thanks. I am at least able to freeze
        things.
        <div><br>
        </div>
        <div>Going further ... executing this in a workspace:
          <div><br>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">b := BoxedMorph new.<br>
              b addMorph: b.<br>
              b openInHand.</blockquote>
            <div><br>
            </div>
            <div>the pointer disappears (infinite redraw), I press cmd-.
              and the debugger (User Interrupt) appears.</div>
          </div>
          <div><br>
          </div>
          <div>Is there any way, at that point, to restore VM state to
            that point prior to (faulty) code execution (as in, cancel
            last 2 messages, #addMorph: and #openInHand) ?</div>
        </div>
      </div>
    </blockquote>
    <br>
    Yes. Just close the debugger. The garbage collector will do the
    rest.<br>
    <br>
    Anyway, just pushed an update that prevents a morph becoming its own
    submorph.<br>
    <br>
    Cheers,<br>
    <br>
    <blockquote type="cite">
      <div dir="ltr">
        <div>
          <div><br>
          </div>
          <div><br>
          </div>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Mon, Mar 13, 2023 at
          4:20 PM Juan Vuletich <<a href="mailto:juan@cuis.st" target="_blank">juan@cuis.st</a>> wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 3/13/2023 1:23 PM, Alexandre Rousseau
          via Cuis-dev wrote:<br>
          > I accidentally introduced a bug in my class instance
          initialization <br>
          > code (adding a submorph to itself). When instantiating my
          class, the <br>
          > debugger appeared but seemed impossible to interact with
          while the <br>
          > task bar rapidly filled up with more such debugger
          representations.<br>
          ><br>
          > Unable to deal with this, I killed my cuis environment,
          losing 30 <br>
          > minutes of work.<br>
          ><br>
          > What do you do when faced with runaway exceptions? Is
          there some <br>
          > keyboard action once can perform to stop the execution of
          it?<br>
          <br>
          It depends on where the exception is raised. If it is in
          #drawOn:, we <br>
          already have a recovery mechanism. In some other cases, cmd-.
          (the <br>
          interrupt key) let's you recover control. But the whole system
          is <br>
          implemented in Smalltalk. There will always be ways to break
          code in a <br>
          way that you can't get to a working UI again. As rabbit
          already said, <br>
          that's why there are several files where your code is logged,
          so you can <br>
          recover it.<br>
          <br>
          HTH,<br>
          <br>
          -- <br>
          Juan Vuletich<br>
          <a href="http://cuis.st" rel="noreferrer" target="_blank">cuis.st</a><br>
          <a href="http://github.com/jvuletich" rel="noreferrer" target="_blank">github.com/jvuletich</a><br>
          <a href="http://researchgate.net/profile/Juan-Vuletich" rel="noreferrer" target="_blank">researchgate.net/profile/Juan-Vuletich</a><br>
          <a href="http://independent.academia.edu/JuanVuletich" rel="noreferrer" target="_blank">independent.academia.edu/JuanVuletich</a><br>
          <a href="http://patents.justia.com/inventor/juan-manuel-vuletich" rel="noreferrer" target="_blank">patents.justia.com/inventor/juan-manuel-vuletich</a><br>
          <a href="http://linkedin.com/in/juan-vuletich-75611b3" rel="noreferrer" target="_blank">linkedin.com/in/juan-vuletich-75611b3</a><br>
          <a href="http://twitter.com/JuanVuletich" rel="noreferrer" target="_blank">twitter.com/JuanVuletich</a><br>
          <br>
        </blockquote>
      </div>
    </blockquote>
    <br>
    <br>
    <pre cols="72">-- 
Juan Vuletich
<a href="http://cuis.st" target="_blank">cuis.st</a>
<a href="http://github.com/jvuletich" target="_blank">github.com/jvuletich</a>
<a href="http://researchgate.net/profile/Juan-Vuletich" target="_blank">researchgate.net/profile/Juan-Vuletich</a>
<a href="http://independent.academia.edu/JuanVuletich" target="_blank">independent.academia.edu/JuanVuletich</a>
<a href="http://patents.justia.com/inventor/juan-manuel-vuletich" target="_blank">patents.justia.com/inventor/juan-manuel-vuletich</a>
<a href="http://linkedin.com/in/juan-vuletich-75611b3" target="_blank">linkedin.com/in/juan-vuletich-75611b3</a>
<a href="http://twitter.com/JuanVuletich" target="_blank">twitter.com/JuanVuletich</a></pre>
  </div>

</blockquote></div>