<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Debugging in CCL has improved a lot but unfortunately there is still a very frequent case when building GUIs which essentially reduces the process of CCL programming to roughly the same level as C++ or Java, i.e., programming problem -> stack trace -> spinning beach ball </div><div><br></div><div>When raising just about any kind of condition in the "initial" thread the AltConsole will come up with some handy exploration features including a simple backtrace. So far so good. But then when trying to exit the break loop one gets </div><div><br></div><div><b>Unhandled exception 10 at 0x9137eaa7, context->regs at #xbffff2bc</b></div><div><br></div><div>No options left at this point. Spinning beach ball, force quit</div><div><br></div><div>It would be OK if this would be a rare case but in a Cocoa app MOST code is running the initial thread (e.g., menu functions, view, window call backs) which means that one is always dangerously close to a complete application crash even for simple problems as, say, calling a missing function. This really should not be the case with Lisp.</div><div><br></div><div>To reproduce (just tested with CCL 1.4):</div><div><br></div><div>;; resizable window with red fill</div><div>(in-package :ccl)</div><div><br></div><div><br></div><div><div>(defclass crasher-view (ns:ns-view)</div><div>  ()</div><div>  (:metaclass ns:+ns-object))</div><div><br></div><div>;;this works</div><div>(objc:defmethod (#/drawRect: :void) ((self crasher-view) (rect :<NSR>ect))</div><div>  (ccl::with-autorelease-pool </div><div>      (#/set (#/redColor ns:ns-color))</div><div>    (#_NSRectFill (#/bounds self))))</div><div><br></div><div><br></div><div><br></div><div>(ns:with-ns-rect (frame 100 100 200 200)</div><div>  (let* ((w (make-instance 'ns:ns-window</div><div>              :with-content-rect frame</div><div>              :style-mask (logior #$NSTitledWindowMask #$NSClosableWindowMask #$NSResizableWindowMask)</div><div>              :backing #$NSBackingStoreBuffered</div><div>              :defer #$YES))</div><div>         (view (make-instance 'crasher-view :with-frame (#/frame (#/contentView w)))))</div><div>    (#/setContentView: w view)</div><div>    (#/orderFront: w nil)</div><div>    w))</div><div><br></div><div>;; redefine with buggy version, resize window to cause problem</div><div>(objc:defmethod (#/drawRect: :void) ((self crasher-view) (rect :<NSR>ect))</div><div>  (ccl::with-autorelease-pool </div><div>      (#/set (#/redColor ns:ns-color))</div><div>    (#_NSRectFill (#/bounds self))</div><div>    ;; call function that does not exist</div><div>    (missing-function 22)))</div><div><br></div></div><div><br></div><div>in AltConsole you get:</div><div><br></div><div><div>> Error: Undefined function CCL::MISSING-FUNCTION called with arguments (22) .</div><div>> While executing: (:INTERNAL CCL::|-[CrasherView drawRect:]|), in process Initial(0).</div><div>> Type :GO to continue, :POP to abort, :R for a list of available restarts.</div><div>> If continued: Retry applying CCL::MISSING-FUNCTION to (22).</div><div>> Type :? for other options.</div><div>1<b> > :pop</b></div><div>Unhandled exception 10 at 0x9137eaa7, context->regs at #xbffff2bc</div><div>Exception occurred while executing foreign code</div><div> at __removeHandler2 + 199</div><div>? for help</div><div>[46133] Clozure CL kernel debugger: </div></div><div><br></div><div><br></div><div>What are the options at this point? Is there a way to pop back from the problem, i.e., abort the event processing without a crash? One could wrap all the call back code up with some error handlers but then one does not get a backtrace to find the real problem which can be tricky in the case of some complex call back function calling all kind of other functions. </div><div><br></div><div>What is this exception "Unhandled exception 10 at 0x9137eaa7, context->regs at #xbffff2bc" ?</div><div><br></div><div>Any suggestions are appreciated,  Alex</div><div><br></div><div><br></div><div><br></div><div><br></div><br><div>
<span class="Apple-style-span" style="font-size: 12px; "><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font: 12.0px Helvetica">Prof. Alexander Repenning</font></p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><br class="khtml-block-placeholder"></p><p style="margin: 0.0px 0.0px 0.0px 0.0px">University of Colorado</p><p style="margin: 0.0px 0.0px 0.0px 0.0px">Computer Science Department</p><p style="margin: 0.0px 0.0px 0.0px 0.0px">Boulder, CO 80309-430</p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><br class="khtml-block-placeholder"></p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font: 12.0px Helvetica">vCard: <a href="http://www.cs.colorado.edu/~ralex/AlexanderRepenning.vcf">http://www.cs.colorado.edu/~ralex/AlexanderRepenning.vcf</a></font></p><br class="Apple-interchange-newline"></span>
</div>
Openmcl-devel Devel <<a href="mailto:openmcl-devel@clozure.com">openmcl-devel@clozure.com</a>></body></html>