--- a/DebugView.st Tue Feb 26 18:09:03 2019 +0100
+++ b/DebugView.st Wed Feb 27 22:46:59 2019 +0100
@@ -37,13 +37,13 @@
classToDefineIn gotoApplicationActionMethodButton
isStoppedInApplicationAction isStoppedAtStatementBreakpoint
verboseBacktraceHolder foundRaisingMethod gotoRaisingMethodButton
- stepInButton infoLabelHolder'
+ stepInButton infoLabelHolder isStoppedAtError'
classVariableNames:'CachedDebugger CachedExclusive OpenDebuggers MoreDebuggingDetail
DebuggingDebugger DebuggingDebugger2 DebuggingContextWalk
DefaultDebuggerBackgroundColor InitialNChainShown IgnoredHalts
ShowThreadID LastIgnoreHaltNTimes LastIgnoreHaltDuration
LastExtent LastOrigin RememberedCallChain DebuggingDebugger3
- NumberOfDebuggers DebuggerOnMainDisplayOnly'
+ NumberOfDebuggers DebuggerOnMainDisplayOnly IgnoredErrors'
poolDictionaries:''
category:'Interface-Debugger'
!
@@ -64,6 +64,13 @@
privateIn:DebugView
!
+DebugView::IgnoredHalt subclass:#IgnoredError
+ instanceVariableNames:'action'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:DebugView
+!
+
DebugView::IgnoredHaltOrBreakpoint subclass:#IgnoredBreakpoint
instanceVariableNames:'parameter'
classVariableNames:''
@@ -313,6 +320,75 @@
orIfCalledFromMethod:nil
!
+ignoreErrorIn:methodOrNil line:lineNrOrNil
+ forCount:countOrNil orTimeDuration:dTOrNil orUntilShiftKey:untilShiftKey
+ orReceiverClass:receiverClassOrNil orProcess:processOrNil
+ orIfCalledFromMethod:ifCalledFromMethodOrNil
+
+ "remember to ignore an error, either forEver, for some number of invocations
+ or until some time has elapsed.
+ With nil count and time arguments, such an ignored error is reactivated"
+
+ |oldEntry ign|
+
+ IgnoredErrors notNil ifTrue:[
+ self removeInactiveIgnores.
+ oldEntry := IgnoredErrors
+ detect:[:ign | ign isForMethod:methodOrNil line:lineNrOrNil]
+ ifNone:nil.
+
+ oldEntry notNil ifTrue:[
+ (processOrNil notNil or:[receiverClassOrNil notNil]) ifTrue:[
+ receiverClassOrNil notNil ifTrue:[
+ oldEntry ignoreForReceiverClass:receiverClassOrNil.
+ ].
+ processOrNil notNil ifTrue:[
+ oldEntry ignoreForProcess:processOrNil.
+ ].
+ ^ self.
+ ].
+ IgnoredErrors remove:oldEntry ifAbsent:[].
+ ]
+ ].
+
+ (countOrNil notNil
+ or:[dTOrNil notNil
+ or:[untilShiftKey == true
+ or:[receiverClassOrNil notNil
+ or:[processOrNil notNil
+ or:[ifCalledFromMethodOrNil notNil]]]]]
+ ) ifTrue:[
+ IgnoredErrors isNil ifTrue:[
+ IgnoredErrors := OrderedCollection new.
+ ].
+ ign := IgnoredError new method:methodOrNil lineNumber:lineNrOrNil.
+
+ (countOrNil notNil and:[countOrNil > 0]) ifTrue:[
+ ign ignoreCount:countOrNil.
+ ].
+ (dTOrNil notNil) ifTrue:[
+ ign ignoreEndTime:(Timestamp now + dTOrNil).
+ ].
+ untilShiftKey == true ifTrue:[
+ ign ignoreUntilShiftKeyPressed:true.
+ ].
+ receiverClassOrNil notNil ifTrue:[
+ ign ignoreForReceiverClass:receiverClassOrNil.
+ ].
+ processOrNil notNil ifTrue:[
+ ign ignoreForProcess:processOrNil.
+ ].
+ ifCalledFromMethodOrNil notNil ifTrue:[
+ ign ignoreIfCalledFromMethod:ifCalledFromMethodOrNil.
+ ].
+ ign action:#abort.
+ IgnoredErrors add:ign.
+ ].
+ Smalltalk changed:#ignoredErrors.
+
+ "Created: / 27-02-2019 / 22:22:47 / Claus Gittinger"
+!
+
ignoreHaltIn:haltingMethod at:lineNrOfHalt
forCount:countOrNil orTimeDuration:dTOrNil orUntilShiftKey:untilShiftKey
orReceiverClass:receiverClassOrNil orProcess:processOrNil
@@ -469,6 +545,31 @@
"Created: / 06-03-2012 / 12:50:30 / cg"
!
+isErrorToBeIgnoredIn:errorMethod atLineNr:lineNrInErrorMethod context:aContext modifyEntryCount:modifyCount
+ "should an error be ignored ?"
+
+ IgnoredErrors isNil ifTrue:[^ false].
+
+ "/ Transcript showCR:'halt/break in ',haltingMethod printString,' at ',lineNrInHaltingMethod printString.
+ IgnoredErrors do:[:ign |
+ (ign isHaltIgnoredInMethod:errorMethod line:lineNrInErrorMethod context:aContext) ifTrue:[
+ Transcript showCR:'Debugger [info]: error ignored: %1' with:ign.
+
+ modifyCount ifTrue:[ ign decrementIgnoreCount ].
+ ign isHaltIgnored ifFalse:[
+ Transcript showCR:'Debugger [info]: no longer ignored (rest count=0)'.
+ IgnoredErrors remove:ign ifAbsent:[].
+ ].
+ ^ true.
+ ].
+ ].
+
+ IgnoredErrors := (IgnoredErrors reject:[:ign | ign isActive not]) asNilIfEmpty.
+ ^ false.
+
+ "Created: / 27-02-2019 / 22:33:37 / Claus Gittinger"
+!
+
isHaltToBeIgnoredIn:haltingMethod atLineNr:lineNrInHaltingMethod context:aContext modifyEntryCount:modifyCount
"should a halt be ignored ?"
@@ -495,28 +596,55 @@
"Modified (comment): / 06-03-2012 / 12:51:43 / cg"
!
+removeInactiveErrors
+ "removes ignores for methods which are no longer present"
+
+ IgnoredErrors notNil ifTrue:[
+ IgnoredErrors := IgnoredErrors select:[:i | i isActive].
+ ].
+
+ "Created: / 27-02-2019 / 13:46:46 / Claus Gittinger"
+ "Modified (comment): / 27-02-2019 / 22:26:10 / Claus Gittinger"
+!
+
removeInactiveIgnores
+ "removes ignores for methods which are no longer present"
+
IgnoredHalts notNil ifTrue:[
IgnoredHalts := IgnoredHalts select:[:i | i isActive].
].
+ IgnoredErrors notNil ifTrue:[
+ IgnoredErrors := IgnoredErrors select:[:i | i isActive].
+ ].
+
+ "Modified: / 27-02-2019 / 22:26:17 / Claus Gittinger"
!
stopIgnoringHalts
"forget about all ignored halts"
- IgnoredHalts := nil.
+ IgnoredHalts := IgnoredErrors := nil.
Smalltalk changed:#ignoredHalts.
+
+ "Modified: / 27-02-2019 / 22:24:31 / Claus Gittinger"
!
stopIgnoringHaltsFor:haltingMethod atLineNr:lineNrInHaltingMethod
"remove the information (if any) about the ignore-state of a halt;
effectively reenables the breakpoint/halt"
- IgnoredHalts isNil ifTrue:[^ self].
-
- IgnoredHalts := IgnoredHalts reject:[:ign |
- (ign isForMethod:haltingMethod line:lineNrInHaltingMethod)
- ].
+ IgnoredHalts notNil ifTrue:[
+ IgnoredHalts := IgnoredHalts reject:[:ign |
+ (ign isForMethod:haltingMethod line:lineNrInHaltingMethod)
+ ].
+ ].
+ IgnoredErrors notNil ifTrue:[
+ IgnoredErrors := IgnoredErrors reject:[:ign |
+ (ign isForMethod:haltingMethod line:lineNrInHaltingMethod)
+ ].
+ ].
+
+ "Modified: / 27-02-2019 / 22:25:06 / Claus Gittinger"
! !
!DebugView class methodsFor:'instance creation / entering'!
@@ -605,7 +733,7 @@
This is the standard way of entering the debugger;
sent from error- and halt messages."
- |retValFromDebugger|
+ |retValFromDebugger con|
"/ a quick check for ignored breakpoints here,
"/ to shortcut the expensive debugger setup.
@@ -624,6 +752,22 @@
].
].
].
+
+ IgnoredErrors notNil ifTrue:[
+ con := ex suspendedContext sender.
+ (self
+ isErrorToBeIgnoredIn:(con method)
+ atLineNr:con lineNumber
+ context:con
+ modifyEntryCount:true
+ ) ifTrue:[
+ "/ Transcript showCR:'error at %1[%2] ignored'
+ "/ with:con method whoString
+ "/ with:con lineNumber.
+ ^ AbortOperationRequest raise.
+ ].
+ ].
+
retValFromDebugger := self
enter:ex returnableSuspendedContext
withMessage:('[',ex originalSignal class name,']: ',ex descriptionForDebugger)
@@ -637,6 +781,7 @@
^ retValFromDebugger
"Modified: / 20-06-2017 / 12:20:22 / cg"
+ "Modified: / 27-02-2019 / 22:45:25 / Claus Gittinger"
!
enterUnconditional:aContext withMessage:aString mayProceed:mayProceed
@@ -889,7 +1034,7 @@
<resource: #menu>
- ^
+ ^
#(Menu
(
(MenuItem
@@ -906,7 +1051,7 @@
)
(MenuItem
label: 'Ignore this Halt/BreakPoint'
- submenu:
+ submenu:
(Menu
(
(MenuItem
@@ -920,9 +1065,9 @@
itemValue: openIgnoreHaltUntilTimeElapsedDialog
)
(MenuItem
- isVisible: isStoppedAtHaltOrBreakPointOrSelectedContextIsWrappedAndHasPreviousIgnoreTime
label: 'For Another Timeduration'
itemValue: ignoreHaltUntilAnotherTimeDurationElapsed
+ isVisible: isStoppedAtHaltOrBreakPointOrSelectedContextIsWrappedAndHasPreviousIgnoreTime
)
(MenuItem
enabled: isStoppedAtHaltOrBreakPointOrSelectedContextIsWrapped
@@ -960,7 +1105,7 @@
(MenuItem
enabled: isStoppedAtBreakPointWithParameter
label: 'Ignore all BreakPoints with this Parameter'
- submenu:
+ submenu:
(Menu
(
(MenuItem
@@ -1008,7 +1153,7 @@
)
(MenuItem
label: 'Ignore all Halts/BreakPoints'
- submenu:
+ submenu:
(Menu
(
(MenuItem
@@ -1037,6 +1182,62 @@
label: '-'
)
(MenuItem
+ label: 'Ignore this Error and Abort'
+ submenu:
+ (Menu
+ (
+ (MenuItem
+ enabled: isStoppedAtError
+ label: 'Forever (Until Ignoring is Stopped)'
+ itemValue: ignoreErrorForever
+ )
+ (MenuItem
+ enabled: isStoppedAtError
+ label: 'For Some Time...'
+ itemValue: openIgnoreErrorUntilTimeElapsedDialog
+ )
+ (MenuItem
+ label: 'For Another Timeduration'
+ itemValue: ignoreErrorUntilAnotherTimeDurationElapsed
+ isVisible: isStoppedAtHaltOrBreakPointOrSelectedContextIsWrappedAndHasPreviousIgnoreTime
+ )
+ (MenuItem
+ enabled: isStoppedAtError
+ label: 'For the Next N Times...'
+ itemValue: openIgnoreErrorNTimesDialog
+ )
+ (MenuItem
+ enabled: isStoppedAtError
+ label: 'Until Shift-Key is Pressed'
+ itemValue: ignoreErrorUntilShiftKeyIsPressed
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
+ enabled: isStoppedAtError
+ label: 'In Current Process'
+ itemValue: ignoreErrorForCurrentProcess
+ )
+ (MenuItem
+ enabled: isStoppedAtError
+ label: 'For this Receiver Class'
+ itemValue: ignoreErrorForThisReceiverClass
+ )
+ (MenuItem
+ enabled: isStoppedAtError
+ label: 'If Called From'
+ submenuChannel: menuForIgnoreErrorIfCalledFromAnyOf
+ )
+ )
+ nil
+ nil
+ )
+ )
+ (MenuItem
+ label: '-'
+ )
+ (MenuItem
enabled: canAddBreakpoint
label: 'Add Breakpoint'
itemValue: addBreakpoint
@@ -1057,8 +1258,6 @@
nil
nil
)
-
- "Modified: / 09-11-2018 / 20:43:16 / Claus Gittinger"
!
classMenuSpec
@@ -1397,12 +1596,13 @@
<resource: #menu>
- ^
+ ^
#(Menu
(
(MenuItem
label: 'Continue'
itemValue: doContinue
+ shortcutKey: CtrlReturn
)
(MenuItem
label: 'Next (Line-Step)'
@@ -1417,7 +1617,7 @@
)
(MenuItem
label: 'After 5 Seconds'
- submenu:
+ submenu:
(Menu
(
(MenuItem
@@ -1924,12 +2124,35 @@
"Modified: / 01-02-2018 / 23:35:30 / stefan"
! !
+!DebugView class methodsFor:'private'!
+
+errorSelectors
+ "these can be ignored via the menu"
+
+ ^ #(
+ #'subclassResponsibility' #'subclassResponsibility:'
+ ).
+
+ "Created: / 27-02-2019 / 13:38:12 / Claus Gittinger"
+!
+
+haltSelectors
+ "these can be ignored via the menu"
+
+ ^ #( #'halt' #'halt:'
+ #'breakPoint:' #'breakPoint:info:' #'break'
+ ).
+
+ "Modified (format): / 27-01-2012 / 11:10:00 / cg"
+ "Modified (comment): / 27-02-2019 / 13:38:25 / Claus Gittinger"
+! !
+
!DebugView class methodsFor:'utilities'!
withOptionToIgnoreException:exceptionOrHandlerSet do:aBlock
"execute aBlock;
if any from exceptionOrHandlerSet is raised during the execution,
- open a confitmation dialog, asking if the debugger should be entered.
+ open a confirmation dialog, asking if the debugger should be entered.
For halts/breakpoints, honors the ignored halt/break list;
also, two checkboxes are added, to also ignore them in the future"
@@ -2060,6 +2283,8 @@
ControlInterrupt withOptionToIgnore:(HaltInterrupt,Error) do:[self halt]
ControlInterrupt withOptionToIgnore:(HaltInterrupt,Error) do:[self error]
"
+
+ "Modified (comment): / 27-02-2019 / 22:28:58 / Claus Gittinger"
! !
!DebugView methodsFor:'accessing'!
@@ -6830,6 +7055,16 @@
"Created: / 06-03-2012 / 12:35:22 / cg"
!
+ignoreErrorForever
+ self
+ addIgnoredErrorForCount:-1 orTimeDuration:nil orUntilShiftKey:false
+ orThisReceiverClass:false orCurrentProcess:false
+ orIfCalledFromMethod:nil
+ forAll:false.
+
+ "Created: / 27-02-2019 / 12:40:38 / Claus Gittinger"
+!
+
ignoreHaltForCurrentProcess
self
addIgnoredHaltForCount:nil orTimeDuration:nil orUntilShiftKey:false
@@ -6894,6 +7129,14 @@
^ self menuForIgnoreBreakpointIfCalledFromAnyOfForAll:true
!
+menuForIgnoreAllErrorsIfCalledFromAnyOf
+ <resource: #programMenu >
+
+ ^ self menuForIgnoreErrorIfCalledFromAnyOfForAll:true
+
+ "Created: / 27-02-2019 / 12:38:59 / Claus Gittinger"
+!
+
menuForIgnoreBreakpointIfCalledFromAnyOf
<resource: #programMenu >
@@ -6935,6 +7178,51 @@
^ m
!
+menuForIgnoreErrorIfCalledFromAnyOf
+ <resource: #programMenu >
+
+ ^ self menuForIgnoreErrorIfCalledFromAnyOfForAll:false
+
+ "Created: / 27-02-2019 / 12:39:12 / Claus Gittinger"
+!
+
+menuForIgnoreErrorIfCalledFromAnyOfForAll:forAllHaltsBoolean
+ <resource: #programMenu >
+
+ |m count already|
+
+ m := Menu new.
+ count := 0.
+ already := IdentitySet new.
+
+ contextArray do:[:con |
+ |mthd cls sel|
+
+ mthd := con method.
+ mthd notNil ifTrue:[
+ mthd isWrapped ifFalse:[
+ (already includes:already) ifFalse:[
+ already add:mthd.
+ m addItem:(MenuItem
+ label: (mthd whoString)
+ itemValue: [ forAllHaltsBoolean
+ ifTrue:[self ignoreErrorIfCalledFromMethod:mthd]
+ ifFalse:[self ignoreAllErrorsIfCalledFromMethod:mthd]
+ ]
+ translateLabel: false).
+ count := count + 1.
+ (count > 20) ifTrue:[
+ ^ m
+ ].
+ ]
+ ]
+ ]
+ ].
+ ^ m
+
+ "Created: / 27-02-2019 / 12:39:36 / Claus Gittinger"
+!
+
openBreakPointBrowser
Tools::BreakpointBrowser open
@@ -7122,6 +7410,14 @@
^ busy
!
+errorSelectors
+ "obsolete - please use class method"
+
+ ^ self class errorSelectors
+
+ "Modified (comment): / 27-02-2019 / 22:39:41 / Claus Gittinger"
+!
+
exclusive:aBoolean
exclusive := aBoolean
!
@@ -7194,12 +7490,11 @@
!
haltSelectors
- ^ #( #'halt' #'halt:'
- #'breakPoint:' #'breakPoint:info:' #'break'
- ).
-
- "Modified (format): / 27-01-2012 / 11:10:00 / cg"
- "Modified (format): / 20-02-2019 / 21:50:16 / Claus Gittinger"
+ "obsolete - please use class method"
+
+ ^ self class haltSelectors
+
+ "Modified (comment): / 27-02-2019 / 22:39:47 / Claus Gittinger"
!
interruptProcessWith:aBlock
@@ -7735,6 +8030,13 @@
"Created: / 06-03-2012 / 12:16:56 / cg"
!
+isStoppedAtError
+ ^ isStoppedAtError "/ ^ self isStoppedAtHaltOrBreakPoint not
+
+ "Created: / 27-02-2019 / 12:36:35 / Claus Gittinger"
+ "Modified: / 27-02-2019 / 22:18:04 / Claus Gittinger"
+!
+
isStoppedAtHaltOrBreakPoint
^ isStoppedAtHaltOrBreakPoint
!
@@ -7772,6 +8074,47 @@
!DebugView methodsFor:'private-breakpoints'!
+addIgnoredErrorForCount:countOrNil
+ orTimeDuration:dTOrNil orUntilShiftKey:untilShiftKey
+ orThisReceiverClass:forThisReceiverClass orCurrentProcess:forCurrentProcess
+ orIfCalledFromMethod:ifCalledForMethodOrNil
+ forAll:aBoolean
+
+ |errorContext errorMethod lineNrOfError receiverClassOrNil processOrNil|
+
+ aBoolean ifTrue:[
+ errorMethod := #all
+ ] ifFalse:[
+ errorContext := self findErrorContext.
+ errorContext isNil ifTrue:[
+ Transcript showCR:'no error context found'.
+ ^ self
+ ].
+
+ errorMethod := errorContext method.
+ lineNrOfError := errorContext lineNumber.
+ (lineNrOfError isNil or:[lineNrOfError <= 0]) ifTrue:[
+ Transcript showCR:'no Error lineNr found'.
+ ^ self
+ ].
+ forThisReceiverClass ifTrue:[
+ receiverClassOrNil := errorContext receiver class
+ ].
+ forCurrentProcess ifTrue:[
+ processOrNil := Processor activeProcess
+ ].
+ ].
+
+ self class
+ ignoreErrorIn:errorMethod line:lineNrOfError
+ forCount:countOrNil orTimeDuration:dTOrNil orUntilShiftKey:untilShiftKey
+ orReceiverClass:receiverClassOrNil orProcess:processOrNil
+ orIfCalledFromMethod:ifCalledForMethodOrNil
+
+ "Created: / 27-02-2019 / 12:42:12 / Claus Gittinger"
+ "Modified: / 27-02-2019 / 22:23:17 / Claus Gittinger"
+!
+
addIgnoredHaltForCount:countOrNil
orTimeDuration:dTOrNil orUntilShiftKey:untilShiftKey
orThisReceiverClass:forThisReceiverClass orCurrentProcess:forCurrentProcess
@@ -7826,40 +8169,62 @@
^ m notNil and:[m isEnabled:#removeBreakpoint]
!
-findHaltingContext
- |haltSelectors|
-
- haltSelectors := self haltSelectors.
-
- contextArray keysAndValuesDo:[:idx :con |
+findContextWithAnySelector:selectors orMClass:mClass orWrapped:orWrappedBoolean
+ |con|
+
+ con := firstContext.
+ [con notNil] whileTrue:[
+ "/ contextArray keysAndValuesDo:[:idx :con |
|sel con2 sel2 method|
sel := con selector.
- (haltSelectors includes:sel) ifTrue:[
+ (selectors includes:sel) ifTrue:[
(method := con method) notNil ifTrue:[
method mclass == Object ifTrue:[
- con2 := contextArray at:idx+1.
+ con2 := con sender. "/ contextArray at:idx+1.
sel2 := con2 selector.
- (haltSelectors includes:sel2) ifTrue:[
+ (selectors includes:sel2) ifTrue:[
con2 method mclass == Object ifTrue:[
- ^ contextArray at:idx+2.
+ ^ con2 sender "/ contextArray at:idx+2.
]
].
- ^ contextArray at:idx+1
+ ^ con2. "/ contextArray at:idx+1
].
- method mclass == Breakpoint ifTrue:[
-(contextArray at:idx+1) infoPrintCR.
- ^ contextArray at:idx+1
+ (mClass notNil and:[method mclass == mClass]) ifTrue:[
+ "/ (contextArray at:idx+1) infoPrintCR.
+ ^ con sender "/ contextArray at:idx+1
].
].
].
- con method isWrapped ifTrue:[
+ (orWrappedBoolean and:[con method isWrapped]) ifTrue:[
^ con
].
+ con := con sender.
].
^ nil
+ "Created: / 27-02-2019 / 13:40:25 / Claus Gittinger"
+ "Modified: / 27-02-2019 / 22:20:27 / Claus Gittinger"
+!
+
+findErrorContext
+ ^ self
+ findContextWithAnySelector:(self class errorSelectors)
+ orMClass:nil
+ orWrapped:false
+
+ "Created: / 27-02-2019 / 13:41:18 / Claus Gittinger"
+ "Modified: / 27-02-2019 / 22:37:14 / Claus Gittinger"
+!
+
+findHaltingContext
+ ^ self
+ findContextWithAnySelector:(self class haltSelectors)
+ orMClass:Breakpoint
+ orWrapped:true
+
"Modified: / 27-01-2012 / 11:06:02 / cg"
+ "Modified: / 27-02-2019 / 22:39:03 / Claus Gittinger"
!
ignoreBreakpoints
@@ -8127,17 +8492,21 @@
|con sel text method caller caller2 called called2 m count c cc sndr
suspendContext calledBySuspendContext nm h calledContext show2
- alreadyInApplicationCode verboseBacktrace|
+ alreadyInApplicationCode verboseBacktrace
+ errorSelectors haltSelectors|
"/ (contextArray size > 0 and:[aContext == (contextArray at:1)]) ifTrue:[
"/ "no change"
"/ ^ false
"/ ].
+ errorSelectors := self class errorSelectors.
+ haltSelectors := self class haltSelectors.
+
isStoppedAtHaltOrBreakPoint := isStoppedAtBreakPointWithParameter := false.
foundRaisingMethod := false.
isStoppedInModalDialog := isStoppedInApplicationAction := alreadyInApplicationCode := false.
- isStoppedAtStatementBreakpoint := false.
+ isStoppedAtStatementBreakpoint := isStoppedAtError := false.
firstContext := aContext.
verboseBacktrace := self verboseBacktraceHolder value.
@@ -8196,7 +8565,7 @@
con notNil ifTrue:[
"/ hide the halt implementation
sel := con selector.
- (self haltSelectors includes:sel) ifTrue:[
+ (haltSelectors includes:sel) ifTrue:[
(method := con method) notNil ifTrue:[
method mclass == Object ifTrue:[
(sel isSymbol and:[ sel startsWith:'breakPoint:']) ifTrue:[
@@ -8221,6 +8590,9 @@
].
].
].
+ (errorSelectors includes:sel) ifTrue:[
+ isStoppedAtError := true.
+ ].
].
(verboseBacktrace not or:[ hideSupportCode]) ifTrue:[
@@ -8229,8 +8601,11 @@
and:[ con isBlockContext not
and:[ con method notNil
and:[ (con method shouldBeSkippedInDebuggersWalkBack)
- and:[ (self haltSelectors includes: con selector) not]]]]
+ and:[ (haltSelectors includes: con selector) not]]]]
] whileTrue:[
+ (errorSelectors includes:con selector) ifTrue:[
+ isStoppedAtError := true.
+ ].
"/ Transcript show:'xx '; showCR:con.
calledContext := con.
con := con sender
@@ -8252,7 +8627,10 @@
DebuggingContextWalk == true ifTrue:[ '---' print. con printCR ].
sel := con selector.
- (self haltSelectors includes:sel) ifTrue:[
+ (errorSelectors includes:sel) ifTrue:[
+ isStoppedAtError := true.
+ ].
+ (haltSelectors includes:sel) ifTrue:[
(method := con method) notNil ifTrue:[
method mclass == Object ifTrue:[
(sel isSymbol and:[sel startsWith:'breakPoint:']) ifTrue:[
@@ -8465,7 +8843,7 @@
"Created: / 14-12-1995 / 19:10:31 / cg"
"Modified: / 30-11-2017 / 12:16:08 / cg"
- "Modified: / 10-10-2018 / 16:24:32 / Claus Gittinger"
+ "Modified: / 27-02-2019 / 22:38:55 / Claus Gittinger"
!
setContextSkippingInterruptContexts:aContext
@@ -9549,7 +9927,6 @@
anEvent isKeyPressEvent ifTrue:[
key := anEvent key.
rawKey := anEvent rawKey.
-
inCodeView := (focusView == codeView
or:[focusView isComponentOf:codeView]).
inCodeView ifTrue:[
@@ -9561,6 +9938,11 @@
withArguments:#().
^ true
].
+ "/ (key == #CtrlReturn) ifTrue:[
+ "/ "/ eat it
+ "/ "/ self sensor enqueueMessage:#doContinue for:self arguments:nil.
+ "/ ^ true
+ "/ ].
].
].
@@ -9584,6 +9966,8 @@
].
^ false
+
+ "Modified: / 27-02-2019 / 12:28:55 / Claus Gittinger"
!
setCurrentMethod:aMethodOrNil
@@ -10482,6 +10866,16 @@
^ self isHaltIgnored "/ unconditionally
! !
+!DebugView::IgnoredError methodsFor:'accessing'!
+
+action
+ ^ action
+!
+
+action:something
+ action := something.
+! !
+
!DebugView::IgnoredBreakpoint class methodsFor:'instance creation'!
parameter:aParameter