<body><div id="__MailbirdStyleContent" style="font-size: 10pt;font-family: Arial;color: #000000">
                                        Hi Hannes,<div><br></div><div>that's a drawing glitch of the debugger. I will look into it.</div><div><br></div><div>Best,</div><div>Marcel</div><div class="mb_sig"></div><blockquote class="history_container" type="cite" style="border-left-style:solid;border-width:1px; margin-top:20px; margin-left:0px;padding-left:10px;">
                        <p style="color: #AAAAAA; margin-top: 10px;">Am 21.09.2019 11:02:17 schrieb H. Hirzel <hannes.hirzel@gmail.com>:</p><div style="font-family:Arial,Helvetica,sans-serif">I experience a strange BlockClosure>>newProcess message while <br>debugging the example <br>     3 factorial <br> <br>Best <br>--Hannes <br> <br>On 9/20/19, Marcel Taeumel <marcel.taeumel@hpi.de> wrote: <br>> I tried both and also rejecting/accepting the conflict in SmalltalkImage >> <br>> #handleUserInterrupt. Works fine. <br>> <br>> Best, <br>> Marcel <br>> Am 20.09.2019 19:43:08 schrieb Thiede, Christoph <br>> <christoph.thiede@student.hpi.uni-potsdam.de>: <br>> Did you first filein your changeset or install this commit? <br>> Von: Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag <br>> von Taeumel, Marcel <br>> Gesendet: Freitag, 20. September 2019 19:42:05 <br>> An: Alan Grimes via Squeak-dev; packages@lists.squeakfoundation.org <br>> Betreff: Re: [squeak-dev] The Trunk: System-mt.1093.mcz <br>> <br>> Strange. If I file in the cmd-dot menu, it still works as expected in recent <br>> trunk. <br>> <br>> Best, <br>> Marcel <br>> Am 20.09.2019 19:20:52 schrieb Thiede, Christoph <br>> <christoph.thiede@student.hpi.uni-potsdam.de>: <br>> FYIO: For me, this commit breaks your new cmdDot menu, my image hangs up <br>> reproducibly. <br>> It would be great if you could create an updated version of the menu :) <br>> Otherwise, how can I safely unload the cmdDot menu to install this commit? <br>> Von: Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag <br>> von commits@source.squeak.org <commits@source.squeak.org> <br>> Gesendet: Dienstag, 17. September 2019 12:10:24 <br>> An: squeak-dev@lists.squeakfoundation.org; <br>> packages@lists.squeakfoundation.org <br>> Betreff: [squeak-dev] The Trunk: System-mt.1093.mcz <br>> <br>> Marcel Taeumel uploaded a new version of System to project The Trunk: <br>> http://source.squeak.org/trunk/System-mt.1093.mcz <br>> [http://source.squeak.org/trunk/System-mt.1093.mcz] <br>> <br>> ==================== Summary ==================== <br>> <br>> Name: System-mt.1093 <br>> Author: mt <br>> Time: 17 September 2019, 12:10:14.798406 pm <br>> UUID: 5eb2c78e-ce42-654d-b764-57fc1e4d0521 <br>> Ancestors: System-mt.1092 <br>> <br>> Refactors process debugging in general, which makes MVC debugging work <br>> again: <br>> <br>> -  adds MorphicDebugger and MVCDebugger as subclasses of Debugger to <br>> untangle debugging for those different GUI frameworks <br>> - removes the intermediate role of UIManager for debugging purposes -- focus <br>> on Project, (Standard)ToolSet, and Process <br>> - treat unhandled warnings the same as unhandled errors, which is through <br>> the current ToolSet <br>> - let SyntaxError tool use tool builder <br>> - clarify #handle* and #debug* methods in ToolSet's 'debugging' category <br>> - adds comments to ToolSet and StandardToolSet <br>> <br>> =============== Diff against System-mt.1092 =============== <br>> <br>> Item was changed: <br>> + ----- Method: Project>>addDeferredUIMessage: (in category 'scheduling & <br>> debugging') ----- <br>> - ----- Method: Project>>addDeferredUIMessage: (in category 'scheduling') <br>> ----- <br>>   addDeferredUIMessage: valuableObject <br>>          "Arrange for valuableObject to be evaluated at a time when the user <br>> interface <br>>          is in a coherent state." <br>> <br>>          self subclassResponsibility! <br>> <br>> Item was removed: <br>> - ----- Method: Project>>debugMethod:forReceiver:inContext: (in category <br>> 'debugging') ----- <br>> - debugMethod: aCompiledMethod forReceiver: anObject inContext: <br>> aContextOrNil <br>> -        "Just execute the method and return the result. We cannot know how <br>> interactive debugging works for arbitrary projects." <br>> - <br>> -        ^ aCompiledMethod <br>> -                valueWithReceiver: anObject <br>> -                 arguments: (aContextOrNil <br>> -                                                        ifNil: [#()] <br>> -                                                        ifNotNil: <br>> [{aContextOrNil}])! <br>> <br>> Item was added: <br>> + ----- Method: Project>>debuggerClass (in category 'scheduling & <br>> debugging') ----- <br>> + debuggerClass <br>> + <br>> +        ^ self subclassResponsibility! <br>> <br>> Item was changed: <br>> + ----- Method: Project>>interruptName: (in category 'scheduling & <br>> debugging') ----- <br>> - ----- Method: Project>>interruptName: (in category 'debugging') ----- <br>>   interruptName: labelString <br>>          "Create a Notifier on the active scheduling process with the given <br>> label." <br>> <br>>          ^ self subclassResponsibility <br>>   ! <br>> <br>> Item was changed: <br>> + ----- Method: Project>>interruptName:preemptedProcess: (in category <br>> 'scheduling & debugging') ----- <br>> - ----- Method: Project>>interruptName:preemptedProcess: (in category <br>> 'debugging') ----- <br>>   interruptName: labelString preemptedProcess: theInterruptedProcess <br>>          "Create a Notifier on the active scheduling process with the given <br>> label." <br>> <br>>          ^ self subclassResponsibility <br>>   ! <br>> <br>> Item was added: <br>> + ----- Method: Project>>syntaxError: (in category 'scheduling & debugging') <br>> ----- <br>> + syntaxError: aSyntaxErrorNotification <br>> + <br>> +        ^ ToolSet debugSyntaxError: aSyntaxErrorNotification! <br>> <br>> Item was changed: <br>>   ----- Method: SmalltalkImage>>handleUserInterrupt (in category <br>> 'miscellaneous') ----- <br>>   handleUserInterrupt <br>>          Preferences cmdDotEnabled ifTrue: <br>> +                [[ToolSet handleUserInterruptRequest: 'User Interrupt'] <br>> fork] <br>> -                [[Project current interruptName: 'User Interrupt'] fork] <br>>   ! <br>> <br>> Item was changed: <br>>   ----- Method: SyntaxErrorNotification>>defaultAction (in category <br>> '*System-exceptionDescription') ----- <br>>   defaultAction <br>> +        ^ToolSet handleSyntaxError: self! <br>> -        ^ToolSet debugSyntaxError: self! <br>> <br>> Item was removed: <br>> - ----- Method: ToolSet class>>debug:context:label:contents:fullView: (in <br>> category 'debugging') ----- <br>> - debug: aProcess context: aContext label: aString contents: contents <br>> fullView: aBool <br>> -        "Open a debugger on the given process and context." <br>> -        self default ifNil:[ <br>> -                (self confirm: 'Debugger request -- proceed?') <br>> -                        ifFalse:[Processor terminateActive]. <br>> -                ^self]. <br>> -        ^self default debug: aProcess context: aContext label: aString <br>> contents: contents fullView: aBool! <br>> <br>> Item was added: <br>> + ----- Method: ToolSet class>>debugActiveProcessContext:label:contents: (in <br>> category 'debugging - convenience') ----- <br>> + debugActiveProcessContext: aContext label: aString contents: contents <br>> + <br>> +        ^ self <br>> +                debugProcess: Processor activeProcess <br>> +                context: aContext <br>> +                label: aString <br>> +                contents: contents <br>> +                fullView: false! <br>> <br>> Item was removed: <br>> - ----- Method: ToolSet class>>debugContext:label:contents: (in category <br>> 'debugging') ----- <br>> - debugContext: aContext label: aString contents: contents <br>> -        "Open a debugger on the given context." <br>> -        self default ifNil:[ <br>> -                (self confirm: 'Debugger request -- proceed?') <br>> -                        ifFalse:[Processor terminateActive]. <br>> -                ^self]. <br>> -        ^self default debugContext: aContext label: aString contents: <br>> contents! <br>> <br>> Item was removed: <br>> - ----- Method: ToolSet class>>debugError: (in category 'debugging') ----- <br>> - debugError: anError <br>> -        "Handle an otherwise unhandled error" <br>> -        self default ifNil:[ | ctx | <br>> -                Smalltalk <br>> -                        logSqueakError: anError description <br>> -                        inContext: (ctx := anError signalerContext) . <br>> -                self inform: (anError description, String cr, ctx <br>> shortStack). <br>> -                ^anError return]. <br>> -        ^self default debugError: anError! <br>> <br>> Item was added: <br>> + ----- Method: ToolSet class>>debugInterruptedProcess:label: (in category <br>> 'debugging') ----- <br>> + debugInterruptedProcess: aSuspendedProcess label: aString <br>> +        "Open a debugger on the given process, which is already <br>> suspended." <br>> + <br>> +        ^ self default <br>> +                ifNil: [(self confirm: 'Debugger request -- proceed?') <br>> ifFalse:[aSuspendedProcess terminate]] <br>> +                ifNotNil: [:ts | ts debugInterruptedProcess: <br>> aSuspendedProcess label: aString]! <br>> <br>> Item was changed: <br>>   ----- Method: ToolSet class>>debugMethod:forReceiver:inContext: (in <br>> category 'debugging') ----- <br>>   debugMethod: aCompiledMethod forReceiver: anObject inContext: aContext <br>> <br>> +        ^ self default <br>> +                ifNil: [ <br>> +                        self inform: 'Cannot debug method. It will just be <br>> executed.'. <br>> +                        aCompiledMethod <br>> +                                valueWithReceiver: anObject <br>> +                                arguments: (aContext ifNil: [#()] ifNotNil: <br>> [{aContext}])] <br>> +                ifNotNil: [:ts | ts debugMethod: aCompiledMethod <br>> forReceiver: anObject inContext: aContext]! <br>> -        self default ifNil:[^ self inform: 'Cannot debug method.']. <br>> -        ^self default debugMethod: aCompiledMethod forReceiver: anObject <br>> inContext: aContext <br>> - ! <br>> <br>> Item was added: <br>> + ----- Method: ToolSet class>>debugProcess:context:label:contents:fullView: <br>> (in category 'debugging') ----- <br>> + debugProcess: aProcess context: aContext label: aString contents: contents <br>> fullView: aBool <br>> +        "Open a debugger on the given process, which  might be active, <br>> suspended, or terminated." <br>> + <br>> +        ^ self default <br>> +                ifNil: [(self confirm: 'Debugger request -- proceed?') <br>> ifFalse: [Processor terminateActive]] <br>> +                ifNotNil: [:ts | ts debugProcess: aProcess context: <br>> aContext label: aString contents: contents fullView: aBool]! <br>> <br>> Item was changed: <br>>   ----- Method: ToolSet class>>debugSyntaxError: (in category 'debugging') <br>> ----- <br>> + debugSyntaxError: aSyntaxErrorNotification <br>> +        "Opens a tool to let the user correct the syntax error, which then <br>> resumes the compiler process." <br>> + <br>> +        ^ self default <br>> +                ifNil: [Project uiManager edit: aSyntaxErrorNotification <br>> errorCode label: 'Syntax Error (read only)'] <br>> +                ifNotNil: [:ts | ts debugSyntaxError: <br>> aSyntaxErrorNotification]! <br>> - debugSyntaxError: anError <br>> -        "Handle a syntax error" <br>> -        self default ifNil:[^self debugError: anError]. "handle as usual <br>> error" <br>> -        ^self default debugSyntaxError: anError! <br>> <br>> Item was added: <br>> + ----- Method: ToolSet class>>handleError: (in category 'debugging - <br>> handlers') ----- <br>> + handleError: anError <br>> +        "No exception handler caught the given error. Let the user handle <br>> that error through an interactive tool such as a debugger. <br>> + <br>> +        THE ACTIVE PROCESS *IS* WHERE THE ERROR HAPPENED." <br>> + <br>> +        ^ self default <br>> +                ifNil: [ | ctx | <br>> +                        Smalltalk <br>> +                                logSqueakError: anError description <br>> +                                inContext: (ctx := anError signalerContext) <br>> . <br>> +                        self inform: (anError description, String cr, ctx <br>> shortStack). <br>> +                        anError return] <br>> +                ifNotNil: [:ts | ts handleError: anError]! <br>> <br>> Item was added: <br>> + ----- Method: ToolSet class>>handleSyntaxError: (in category 'debugging - <br>> handlers') ----- <br>> + handleSyntaxError: anError <br>> +        "A syntax error (notification) occurred while parsing and compiling <br>> source code. Usually, the compiling process suspends until the syntax error <br>> gets corrected. <br>> + <br>> +        THE ACTIVE PROCESS *IS* THAT COMPILER PROCESS." <br>> + <br>> +        ^ self default <br>> +                ifNil: [self handleError: anError] <br>> +                ifNotNil: [:ts | ts handleSyntaxError: anError]! <br>> <br>> Item was added: <br>> + ----- Method: ToolSet class>>handleUserInterruptRequest: (in category <br>> 'debugging - handlers') ----- <br>> + handleUserInterruptRequest: aString <br>> +        "The user wants to interrupt a process, which might be <br>> unresponsive, to debug it. <br>> + <br>> +        THE ACTIVE PROCESS *IS* A HELPER PROCESS with a priority higher <br>> than the preempted one. See EventSensor >> #userInterruptWatcher." <br>> + <br>> +        ^ self default <br>> +                ifNil: [self inform: 'No handler for user interrupts <br>> found.'] <br>> +                ifNotNil: [:ts | ts handleUserInterruptRequest: aString]! <br>> <br>> Item was added: <br>> + ----- Method: ToolSet class>>handleWarning: (in category 'debugging - <br>> handlers') ----- <br>> + handleWarning: aWarning <br>> +        "No exception handler caught the given warning. Let the user handle <br>> that warning through an interactive tool such as a debugger. <br>> + <br>> +        THE ACTIVE PROCESS *IS* WHERE THE WARNING HAPPENED." <br>> + <br>> +        ^ self default <br>> +                ifNil: [ <br>> +                        self inform: (aWarning messageText, String cr, <br>> aWarning signalerContext shortStack). <br>> +                        aWarning resume] <br>> +                ifNotNil: [:ts | ts handleWarning: aWarning]! <br>> <br>> Item was removed: <br>> - ----- Method: ToolSet class>>interrupt:label: (in category 'debugging') <br>> ----- <br>> - interrupt: aProcess label: aString <br>> -        "Open a debugger on the given process and context." <br>> -        self default ifNil:[ <br>> -                (self confirm: 'Debugger request -- proceed?') <br>> -                        ifFalse:[aProcess terminate]. <br>> -                ^self]. <br>> -        ^self default interrupt: aProcess label: aString! <br>> <br>> Item was changed: <br>>   ----- Method: UnhandledError>>defaultAction (in category '*System-priv <br>> handling') ----- <br>>   defaultAction <br>>          "The current computation is terminated. The cause of the error <br>> should be logged or reported to the user. If the program is operating in an <br>> interactive debugging environment the computation should be suspended and <br>> the debugger activated." <br>> +        ^ToolSet handleError: self exception! <br>> -        ^ToolSet debugError: self exception! <br>> <br>> Item was changed: <br>>   ----- Method: UnhandledWarning>>defaultAction (in category '*System-priv <br>> handling') ----- <br>>   defaultAction <br>> <br>> +        ^ ToolSet handleWarning: self exception! <br>> -        ^ ToolSet <br>> -                debugContext: self exception signalerContext <br>> -                label: 'Warning' <br>> -                contents: self exception messageText , '\\Select Proceed to <br>> continue, or close this window to cancel the operation.' withCRs! <br>> <br>> Item was changed: <br>>   ----- Method: WrappedBreakpoint>>run:with:in: (in category 'evaluation') <br>> ----- <br>>   run: aSelector with: anArray in: aReceiver <br>>          | process | <br>>          process := Process <br>>                  forContext: (Context <br>>                          sender: thisContext sender <br>>                          receiver: aReceiver <br>>                          method: method <br>>                          arguments: anArray) <br>>                  priority: Processor activeProcess priority. <br>>          ToolSet <br>> +                debugProcess: process <br>> -                debug: process <br>>                  context: process suspendedContext <br>>                  label:  'Breakpoint in ' , method methodClass name , '>>#' <br>> , method selector <br>>                  contents: nil <br>>                  fullView: true. <br>>          Project current spawnNewProcessIfThisIsUI: Processor <br>> activeProcess. <br>>          thisContext swapSender: nil. <br>>          Processor activeProcess terminate! <br>> <br>> <br>> <br><br></commits@source.squeak.org></squeak-dev-bounces@lists.squeakfoundation.org></christoph.thiede@student.hpi.uni-potsdam.de></squeak-dev-bounces@lists.squeakfoundation.org></christoph.thiede@student.hpi.uni-potsdam.de></marcel.taeumel@hpi.de></div></blockquote>
                                        </div></body>