Eliot Miranda uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-eem.756.mcz ==================== Summary ==================== Name: Tools-eem.756 Author: eem Time: 11 April 2017, 12:06:44.157162 pm UUID: e6634875-90c8-4ebf-9f07-5b3e1aadfc81 Ancestors: Tools-cmm.755 Make the debugger handle gracefully stepping through the termiation of a process. =============== Diff against Tools-cmm.755 =============== Item was changed: ----- Method: Debugger>>buildControlButtonsWith: (in category 'toolbuilder') ----- buildControlButtonsWith: builder | panelSpec | panelSpec := builder pluggablePanelSpec new. panelSpec children: OrderedCollection new. self customButtonSpecs do:[:spec| | buttonSpec | buttonSpec := builder pluggableActionButtonSpec new. buttonSpec model: self. buttonSpec label: spec first. buttonSpec action: spec second. spec second == #methodHierarchy ifTrue:[ buttonSpec color: #inheritanceButtonColor. ]. + spec size > 2 ifTrue: + [buttonSpec help: spec third. + spec size > 3 ifTrue: + [buttonSpec enabled: spec fourth]]. - spec size > 2 ifTrue:[buttonSpec help: spec third]. panelSpec children add: buttonSpec. ]. panelSpec layout: #horizontal. "buttons" ^panelSpec! Item was changed: ----- Method: Debugger>>customButtonSpecs (in category 'initialize') ----- customButtonSpecs "Answer an array of elements of the form wording, selector, help-message, that characterize the custom button row of a debugger." | list | list := #(('Proceed' proceed 'close the debugger and proceed.') ('Restart' restart 'reset this context to its start.') + ('Into' send 'step Into message sends' interruptedProcessIsActive) + ('Over' doStep 'step Over message sends' interruptedProcessIsActive) + ('Through' stepIntoBlock 'step into a block' interruptedProcessIsActive) - ('Into' send 'step Into message sends') - ('Over' doStep 'step Over message sends') - ('Through' stepIntoBlock 'step into a block') ('Full Stack' fullStack 'show full stack') ('Where' where 'select current pc range') ('Tally' tally 'time in milliseconds to execute')). Preferences restartAlsoProceeds ifTrue: [list := list collect: [:each | each second == #restart ifTrue: [each copy at: 3 put: 'proceed from the beginning of this context.'; yourself] ifFalse: [each]]]. ^ list! Item was added: + ----- Method: Debugger>>interruptedProcessIsActive (in category 'user interface') ----- + interruptedProcessIsActive + ^interruptedProcess isTerminated not! Item was changed: ----- Method: Debugger>>resetContext:changeContents: (in category 'private') ----- resetContext: aContext changeContents: aBoolean "Used when a new context becomes top-of-stack, for instance when the method of the selected context is re-compiled, or the simulator steps or returns to a new method. There is room for much optimization here, first to save recomputing the whole stack list (and text), and secondly to avoid recomposing all that text (by editing the paragraph instead of recreating it)." | oldContext | oldContext := self selectedContext. + self newStack: (aContext ifNil: [oldContext]) contextStack. + self changed: #contextStackList; changed: #interruptedProcessIsActive. - self newStack: aContext contextStack. - self changed: #contextStackList. self contextStackIndex: 1 oldContextWas: oldContext. aBoolean ifTrue: [self contentsChanged]. ! |
Free forum by Nabble | Edit this page |