<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>