<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
    <title></title>
  </head>
  <body bgcolor="#ffffff" text="#000000">
    On 3/13/2023 6:05 PM, Alexandre Rousseau via Cuis-dev wrote:
    <blockquote
cite="mid:CAKmOay+1bX1oVRu=z0930m_Qnri625HWVVLzZkvX7EpmotLm+w@mail.gmail.com"
      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
cite="mid:CAKmOay+1bX1oVRu=z0930m_Qnri625HWVVLzZkvX7EpmotLm+w@mail.gmail.com"
      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 moz-do-not-send="true"
            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;">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 moz-do-not-send="true" href="http://cuis.st"
            rel="noreferrer" target="_blank">cuis.st</a><br>
          <a moz-do-not-send="true" href="http://github.com/jvuletich"
            rel="noreferrer" target="_blank">github.com/jvuletich</a><br>
          <a moz-do-not-send="true"
            href="http://researchgate.net/profile/Juan-Vuletich"
            rel="noreferrer" target="_blank">researchgate.net/profile/Juan-Vuletich</a><br>
          <a moz-do-not-send="true"
            href="http://independent.academia.edu/JuanVuletich"
            rel="noreferrer" target="_blank">independent.academia.edu/JuanVuletich</a><br>
          <a moz-do-not-send="true"
            href="http://patents.justia.com/inventor/juan-manuel-vuletich"
            rel="noreferrer" target="_blank">patents.justia.com/inventor/juan-manuel-vuletich</a><br>
          <a moz-do-not-send="true"
            href="http://linkedin.com/in/juan-vuletich-75611b3"
            rel="noreferrer" target="_blank">linkedin.com/in/juan-vuletich-75611b3</a><br>
          <a moz-do-not-send="true"
            href="http://twitter.com/JuanVuletich" rel="noreferrer"
            target="_blank">twitter.com/JuanVuletich</a><br>
          <br>
        </blockquote>
      </div>
    </blockquote>
    <br>
    <br>
    <pre class="moz-signature" cols="72">-- 
Juan Vuletich
cuis.st
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich
linkedin.com/in/juan-vuletich-75611b3
twitter.com/JuanVuletich</pre>
  </body>
</html>