|
Class: DebugView
Object
|
+--GraphicsMedium
|
+--DisplaySurface
|
+--SimpleView
|
+--View
|
+--TopView
|
+--StandardSystemView
|
+--DebugView
- Package:
- stx:libtool
- Category:
- Interface-Debugger
- Version:
- rev:
1.938
date: 2024/04/26 23:18:30
- user: cg
- file: DebugView.st directory: libtool
- module: stx stc-classLibrary: libtool
This class implements a graphical debugger interface.
The debugger usually sits on top of the faulting process,
taking over its event processing.
(this is different from other Smalltalk debuggers, which control
the debuggee as a separate process. Consider this an historic
leftover - the debugger was one of the first applications written for ST/X.
The whole setup might be changed, once the required process primitives
are available, which allow control of another processes execution
(i.e. single-step, restart & return). The setup will be changed then,
to have the debugger control the debuggee (i.e. two processes).
However, as it works as it is, and is reliable enough,
why should we change it without a particular need...).
Only the 'stopped' debugged process is affected;
other processes continue to respond to events.
The one exception to this is when an error occurs within the dispatcher process
or in one of the eventhandler processes. In this case, the debugger
will sit on an exclusive display connection.
See additional information in 'doc/misc/debugger.doc'.
Notice & Warning (attention when changing things like menus, window spec etc. here):
the DebugView class caches the last used debugger in a class variable,
and hides/shows this window without recreating one from scratch. This is done to make
the debugger come up faster when single stepping, or hopping from breakpoint to breakpoint.
It may happen, that a malfunctioning debugger (for example, a halfway created/destroyed one)
is kept there. You will notice this if a debugger comes up without showing any contents.
In this case, close (or destroy) the broken debugView, and execute:
Debugger newDebugger
which removes the cached debugger and forces creation of a new one the next time.
This is a temporary workaround - the debugger should be fixed to avoid this situation.
You must also flush the cached debugger, if you change the debugger's
initialization code (buttons, menu, etc.) or the debugger's class layout,
and you want the new code to become effective
(otherwise, the already instantiated, cached debugger will be reused).
copyrightCOPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
cleanup
-
lowSpaceCleanup
-
in low memory situations, give up cached debuggers
Usage example(s):
DebugView lowSpaceCleanup
|
-
newDebugger
-
force creation of a new debugger (give up cached debuggers).
Call this, if you changed the debugger heavily, and you want to avoid
that an old, cached debugger gets reused when the next error comes around.
Usage example(s):
DebugView newDebugger
DebugView withAllSubclassesDo:#newDebugger
|
defaults
-
debuggerOnMainDisplayOnly
-
-
defaultIcon
-
return the browsers default window icon
-
defaultIconForAboutBox
-
-
defaultVerboseBacktrace
-
** This is an obsolete interface - do not use it (it may vanish in future versions) **
-
defaultVerboseBacktrace: aBoolean
-
** This is an obsolete interface - do not use it (it may vanish in future versions) **
-
maxNumberOfDebuggers
-
to prevent debuggers from flooding the screen,
in case of an error in an ever-forked background process
(such as tooltip process)
-
updateStyleCache
-
extract values from the styleSheet and cache them in class variables
ignoring halts
-
haltIgnoreInformationFor: haltingMethod atLineNr: lineNrInHaltingMethod
-
the information (if any) about the ignore-state of a halt
-
hasIgnoredHalts
-
-
ignoreAssertIn: haltingMethod at: lineNrOfHalt forCount: countOrNil orTimeDuration: dTOrNil orUntilShiftKey: untilShiftKey orReceiverClass: receiverClassOrNil orProcess: processOrNil orIfCalledFromMethod: ifCalledForMethodOrNil
-
remember to ignore an assert in some method for some number of invocations
or until some time has elapsed.
With a count of -1, it is ignored forever (i.e. until reenabled via the settings).
With nil count and time arguments, such an ignored assert is reactivated
-
ignoreBreakpointWithParameter: parameterOrNil forCount: countOrNil orTimeDuration: dTOrNil orUntilShiftKey: untilShiftKey orReceiverClass: receiverClassOrNil orProcess: processOrNil
-
remember to ignore a breakpoint with a parameter (i.e. breakpoint:#cg)
for some number of invocations or until some time has elapsed.
With nil count and time arguments, such an ignored breakpoint is reactivated
-
ignoreHaltIn: haltingMethod at: lineNrOfHalt forCount: countOrNil orTimeDuration: dTOrNil orUntilShiftKey: untilShiftKey orReceiverClass: receiverClassOrNil orProcess: processOrNil
-
remember to ignore a halt in some method for some number of invocations,
or until some time has elapsed.
With nil count and time arguments, such an ignored halt is reactivated
-
ignoreHaltIn: haltingMethod at: lineNrOfHalt forCount: countOrNil orTimeDuration: dTOrNil orUntilShiftKey: untilShiftKey orReceiverClass: receiverClassOrNil orProcess: processOrNil orIfCalledFromMethod: ifCalledForMethodOrNil
-
remember to ignore a halt in some method for some number of invocations
or until some time has elapsed.
With a count of -1, it is ignored forever (i.e. until reenabled via the settings).
With nil count and time arguments, such an ignored halt is reactivated
-
ignoreHaltOrBreakpoint: type method: methodOrNil line: lineNrOfHaltOrNil parameter: parameterOrNil forCount: countOrNil orTimeDuration: dTOrNil orUntilShiftKey: untilShiftKey orReceiverClass: receiverClassOrNil orProcess: processOrNil
-
remember to ignore a breakpoint with a parameter (i.e. breakpoint:#cg)
for some number of invocations or until some time has elapsed.
With nil count and time arguments, such an ignored breakpoint is reactivated
-
ignoreHaltOrBreakpoint: type method: methodOrNil line: lineNrOfHaltOrNil parameter: parameterOrNil forCount: countOrNil orTimeDuration: dTOrNil orUntilShiftKey: untilShiftKey orReceiverClass: receiverClassOrNil orProcess: processOrNil orIfCalledFromMethod: ifCalledFromMethodOrNil
-
remember to ignore a breakpoint with a parameter (i.e. breakpoint:#cg)
for some number of invocations or until some time has elapsed.
With nil count and time arguments, such an ignored breakpoint is reactivated
-
isBreakpointToBeIgnoredForParameter: parameter context: aContext modifyEntryCount: modifyCount
-
should a breakpoint be ignored ?
-
isErrorToBeIgnoredIn: errorMethod atLineNr: lineNrInErrorMethod context: aContext modifyEntryCount: modifyCount
-
should an error be ignored ?
And if so, how.
Returns #proceed or #abort or nil
-
isHaltToBeIgnoredFor: aContext
-
see if the current halt (if any) is in the ignore-list
-
isHaltToBeIgnoredIn: haltingMethod atLineNr: lineNrInHaltingMethod context: aContext modifyEntryCount: modifyCount
-
should a halt be ignored ?
-
removeInactiveErrors
-
removes ignores for methods which are no longer present
-
removeInactiveIgnores
-
removes ignores for methods which are no longer present
-
stopIgnoringHalts
-
forget about all ignored halts
-
stopIgnoringHaltsFor: haltingMethod atLineNr: lineNrInHaltingMethod
-
remove the information (if any) about the ignore-state of a halt;
effectively reenables the breakpoint/halt
initialization
-
initialize
-
DefaultDebuggerBackgroundColor := nil.
-
reinitialize
-
reinitialize after an image-restart
instance creation / entering
-
enter
-
enter a debugger
-
enter: aContext withMessage: aString
-
enter a debugger
-
enter: aContext withMessage: aString mayProceed: mayProceed
-
enter a debugger; if this is a recursive invocation, enter
a MiniDebugger instead.
This is the standard way of entering the debugger;
sent from error- and halt messages.
-
enterException: ex
-
enter a debugger; if this is a recursive invocation, enter
a MiniDebugger instead.
This is the standard way of entering the debugger;
sent from error- and halt messages.
-
enterUnconditional: aContext withMessage: aString mayProceed: mayProceed
-
enter a debugger - do not check for recursive invocation
-
enterWithMessage: message
-
enter a debugger
-
new
-
return a new DebugView.
- return a cached debugger if it already exists.
Also, care for remote displays on which no debugger is wanted
(ask with mayOpenDebugger) - if so, open on the default screen.
-
newExclusive
-
return a debugger for exclusive display access
-
openDebuggerForActiveProcess
-
return an already open debugger for the active process, or nil, if there is none.
Open debuggers exist when stepping only, as then, the debugger is left open until the step
is reached, to avoid too much flickering and redrawing on the screen
-
openDebuggerForProcess: aProcess
-
if aProcess is being debugged and has an open debugger on it,
then return it, or nil, if there is none.
Open debuggers also exist as unmapped windows when single-stepping
-
openDebuggers
-
-
openOn: aProcess
-
start a debugger on aProcess
(actually not more than a good-looking inspector)
menu specs
-
additionalFileMenuItemsSpec
-
This resource specification was automatically generated
by the MenuEditor of ST/X.
-
additionalFileMenuItemsSpec2
-
This resource specification was automatically generated
by the MenuEditor of ST/X.
-
breakPointMenuSpec
-
This resource specification was automatically generated
by the MenuEditor of ST/X.
Usage example(s):
MenuEditor new openOnClass:DebugView andSelector:#breakPointMenuSpec
(Menu new fromLiteralArrayEncoding:(DebugView breakPointMenuSpec)) startUp
|
-
classMenuSpec
-
This resource specification was automatically generated
by the MenuEditor of ST/X.
-
contextMenuSpec
-
This resource specification was automatically generated
by the MenuEditor of ST/X.
Usage example(s):
MenuEditor new openOnClass:DebugView andSelector:#contextMenuSpec
(Menu new fromLiteralArrayEncoding:(DebugView contextMenuSpec)) startUp
|
-
fileMenuSpec
-
This resource specification was automatically generated
by the MenuEditor of ST/X.
Usage example(s):
MenuEditor new openOnClass:DebugView andSelector:#fileMenuSpec
(Menu new fromLiteralArrayEncoding:(DebugView fileMenuSpec)) startUp
|
-
helpMenuSpec
-
This resource specification was automatically generated
by the MenuEditor of ST/X.
Usage example(s):
MenuEditor new openOnClass:DebugView andSelector:#helpMenuSpec
(Menu new fromLiteralArrayEncoding:(DebugView helpMenuSpec)) startUp
|
-
menuSpec
-
This resource specification was automatically generated
by the MenuEditor of ST/X.
Usage example(s):
MenuEditor new openOnClass:DebugView andSelector:#menuSpec
(Menu new fromLiteralArrayEncoding:(DebugView menuSpec)) startUp
|
-
processMenuSpec
-
This resource specification was automatically generated
by the MenuEditor of ST/X.
Usage example(s):
MenuEditor new openOnClass:DebugView andSelector:#processMenuSpec
(Menu new fromLiteralArrayEncoding:(DebugView processMenuSpec)) startUp
|
-
selectorMenuSpec
-
This resource specification was automatically generated
by the MenuEditor of ST/X.
Usage example(s):
MenuEditor new openOnClass:DebugView andSelector:#selectorMenuSpec
(Menu new fromLiteralArrayEncoding:(DebugView selectorMenuSpec)) startUp
|
-
viewMenuSpec
-
This resource specification was automatically generated
by the MenuEditor of ST/X.
Usage example(s):
MenuEditor new openOnClass:DebugView andSelector:#viewMenuSpec
(Menu new fromLiteralArrayEncoding:(DebugView viewMenuSpec)) startUp
|
misc
-
interestingContextFrom: aContext
-
return an interesting context to be shown in an error notifier.
We move up the calling chain, skipping intermediate Signal
and Exception contexts, to present the context in which the error
actually occurred.
Just for your convenience :-)
-
interestingContextIndexIn: aContextArray
-
return an interesting context's index, or nil.
This is the context initially shown (selected) in the walkback.
We move up the calling chain, skipping all intermediate Signal
and Exception contexts, to present the context in which the error actually occurred.
Just for your (my) convenience :-)
-
withDebuggingFlagSetDo: aBlock
-
mark this process as a process executing a debugger (or debugger-like code).
This can be used to not delay on certain operations (e.g. Lazy and Bridge proxies).
For example, the Inspector does this when showing values, to prevent remote objects from blocking it.
private
-
assertSelectors
-
these can be ignored via the menu
-
errorSelectors
-
these can be ignored via the menu
-
haltSelectors
-
these can be ignored via the menu
-
proceedableErrorSelectors
-
these can be ignored via the menu
utilities
-
debuggedMethodHistory
-
-
withOptionToIgnoreException: exceptionOrHandlerSet do: aBlock
-
execute aBlock;
if any from exceptionOrHandlerSet is raised during the execution,
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
accessing
-
canAbort
-
-
contextInfo: aString
-
shown in the middle context info (typically: interrupt: ...)
-
contextInspector
-
-
exitAction
-
-
inspectedProcess
-
-
stepHow
-
aspects
-
breakpointMenuVisible
-
-
contextMenuVisible
-
-
receiverMenuVisible
-
-
selectorMenuVisible
-
-
verboseBacktraceHolder
-
basic
-
enableDisableActions
-
-
enter
-
enter a debugger
-
enter: aContextOrNil select: initialSelectionOrNil
-
enter the debugger - get and display the context, then start an
exclusive event loop on top of eveything else
-
exit_abort
-
cannot simply raise an abort here, because if there is an abortHandler somewhere,
-
exit_abortAll
-
cannot simply raise an abort here, because if there is an abortHandler somewhere,
-
exit_quickTerminate
-
-
exit_resend
-
have to catch errors occuring in unwind-blocks
-
exit_restart
-
have to catch errors occuring in unwind-blocks
-
exit_return
-
if there is a selection in the codeView,
evaluate it and use the result as return value
-
exit_terminate
-
have to catch errors occuring in unwind-blocks
-
exit_unwindThenDo: aBlock
-
cannot simply raise an abort here, because if there is an abortHandler somewhere,
-
initialSelectionOnEntry: initialSelectionOrNil context: aContext
-
and find the one context to show initially
- if we came here by a send (single step), its the top context;
- if we came here by a step (i.e. bigStep), its the top context
(for ifs and whiles) or the sender (for regular sends).
- otherwise, we came here by some signal raise, and we are interested
in the context where the raise actually occurred.
-
isInspecting
-
-
isNotInspecting
-
-
openOn: aProcess
-
enter the debugger on a process -
in this case, we are just inspecting the context chain of the process,
not running on top of the debugged process, but as a separate
one. (think of it as an inspector showing more detail, and offering
some more control operations)
-
redefinedEnableStepInterruptForReentry: aContext
-
-
selectContextWithIndex: index
-
-
setInitialSelectionOnEntry: initialSelectionOrNil context: aContext
-
-
turnOffAllButtons
-
help
-
flyByHelpDependsOnPositionIn: aView
-
subclasses where the help-text depends upon the pointer position might
want to redefine this.
In the codeView, we follow the token under the mouse pointer...
-
helpTextFor: aComponent
-
s := 'Stop'
-
helpTextFor: aComponent at: aPointOrNil
-
vline
initialization & release
-
addToCurrentProject
-
ignored here
-
additionalLocationInfo
-
subclasses may provide additional info for the executionInfoLabel
(such as repreat count of an activity)
-
destroy
-
closing the debugger implies an abort or continue
-
destroyWithConfirmation: withConfirmation
-
closing the debugger implies an abort or continue
-
initialize
-
Debugger newDebugger
-
initializeAbortButtonIn: bpanel
-
-
initializeButtons1In: bpanel
-
creates the top button row,
consisting of 'continue', 'abort', 'terminate'...
-
initializeButtons2In: bpanel
-
creates the second button row,
consisting of 'next', 'step', 'return'...
-
initializeButtonsIn: bpanel
-
cg:
-
initializeCodeViewIn: panel
-
for active help
-
initializeContextInspectorViewIn: hPanel
-
two inspectors near the bottom
-
initializeContextListViewIn: panel
-
-
initializeContextViewsMiddleButtonMenu
-
-
initializeContinueButtonIn: bpanel
-
-
initializeDefineButtonIn: bpanel
-
-
initializeFlags
-
ignore halts/breakpoints in doIts of
-
initializeGotoApplicationActionMethodButtonIn: bpanel
-
-
initializeGotoDialogOpenerButtonIn: bpanel
-
-
initializeGotoRaisingMethodButtonIn: bpanel
-
-
initializeGotoUnitTestMethodButtonIn: bpanel
-
-
initializeInfoPanelIn: aView
-
info at the bottom
-
initializeInspectorViewsIn: panel
-
two inspectors near the bottom
-
initializeNextButtonIn: bpanel
-
-
initializeReceiverInspectorViewIn: hPanel
-
two inspectors near the bottom
-
initializeReportButtonIn: bpanel
-
-
initializeResendButtonIn: bpanel
-
if we have this, we do not need the restart button
-
initializeRestartButtonIn: bpanel
-
-
initializeReturnButtonIn: bpanel
-
-
initializeSendButtonIn: bpanel
-
-
initializeStepButtonIn: bpanel
-
-
initializeStepInButtonIn: bpanel
-
-
initializeTerminateButtonIn: bpanel
-
terminateButton foregroundColor:Color red.
-
initializeVerboseBacktraceHolder
-
-
initializeViews
-
old layout; will vanish
-
inspectorViewClassForContext
-
-
inspectorViewClassForReceiver
-
-
inspectorViewClassForStack
-
-
postRealize
-
set prio somewhat higher (by 2, to allow walkBack-update process
to run between mine and the debugged processes prio)
-
reinitialize
-
redefined - since the debugView runs on top of
-
releaseDebuggee
-
We have to be careful to release all refs to the debuggee,
because we may be in the cache.
Otherwise, the GC will not be able to release it
-
setLabelFor: errorDescriptionMessage in: aProcess
-
-
setLabelFor: errorDescriptionMessage in: aProcessOrNil orElseInLocation: aLocationStringOrNil
-
set the window-title and the exceptionInfo label's string
-
terminateButtonLabel
-
interrupt handling
-
contextInterrupt
-
-
stepInterrupt
-
' in ' print. thisContext sender fullPrint.
-
stepOrNext
-
DebuggingDebugger := true
menu & button actions
-
addBrowserBookmark
-
add a browser-bookmark for the selected contexts method
-
autoRaiseView
-
if true, the debugger raises itself automatically when entered.
-
autoRaiseView: aBoolean
-
-
autoUpdateOff
-
stop the update process
-
autoUpdateOn
-
fork a subprocess which updates the contextList in regular intervals
-
browseBlocksHome
-
browse the receiver block's home method (if a value-like send is selected)
-
browseClass
-
browse the receiver's class (of the selected context's message)
-
browseClassHierarchy
-
browse the receiver's classHierarchy (of the selected context's message)
-
browseFullClassProtocol
-
browse the receiver's full protocol (of the selected context's message)
-
browseImplementingClass
-
browse the implementing class (of the selected context's message)
-
browseImplementors
-
open a browser on the implementors of the selected method's selector
-
browseImplementorsOf
-
open a browser on the implementors of some selector
-
browseProcessesApplication
-
browse the application class (of the process, if it is a GUI process)
-
browseReceiversClass
-
browse the receiver's class (of the selected context's message)
-
browseSenders
-
open a browser on the senders of the selected method's selector
-
browseSendersOf
-
open a browser on the senders of some selector
-
clearRememberedCallchain
-
clear the remembered callchain.
-
closeAllDebuggers
-
-
closeAllOtherDebuggers
-
-
configureX: x y: y width: newWidth height: newHeight
-
(comment from inherited method)
my size has changed by window manager action
-
copyWalkbackText
-
place the contents of the walkback view into the copy-paste buffer.
This allows pasting it into some other view for printing.
Show the full verbose context without filtering.
-
copyWalkbackTextWithVariables
-
place the contents of the walkback view into the copy-paste buffer.
This allows pasting it into some other view for printing.
Show the full verbose context without filtering.
-
copyWalkbackTextWithVariables: withVariables
-
place the contents of the walkback view into the copy-paste buffer.
This allows pasting it into some other view for printing.
Show the full verbose context without filtering.
-
doAbort
-
abort - send Object>>abortSignal, which is usually caught
at save places (for example: in the event loop) and returns back
from whatever the process is doing, but does not terminate it.
-
doAbortAll
-
abortAll - send Object>>abortAllSignal, which is usually caught
at save places (for example: in the event loop) and returns back
from whatever the process is doing, but does not terminate it.
-
doAbortWithoutConfirmation
-
abort - send Object>>abortSignal, which is usually caught
at save places (for example: in the event loop) and returns back
from whatever the process is doing, but does not terminate it.
-
doChangeProcessPriority
-
ask for and change the process's priority
-
doContinue
-
continue from menu
-
doContinueAfterDelay
-
-
doDefine
-
when we hit an unimplemented message, the 'define' button becomes visible.
This is the action of it, when clicked.
Define a new halting method in the faulting class,
and restart the context so we end up in the halt of the new method
-
doGotoApplicationActionMethod
-
select the first application-model context.
This is another great helper, when you hit an exception,
to quickly navigate to the responsible code of you application
-
doGotoDialogOpener
-
select the context where the dialog was opened.
This is a great helper, when you press interrupt while a modal dialog is open,
to quickly navigate to the corresponding opening code of your application
-
doGotoRaisingMethod
-
select the (next) context where the exception was raised.
This is a great helper, to quickly navigate to the code which is responsible for the error
-
doGotoUnitTestMethod
-
select the unitTest method from where we come from.
This is a great helper, when you get a debugger inside a unit test run,
to quickly navigate to the corresponding test of the suite
-
doInspectProcess
-
-
doMicroSend
-
single send; reenter with next message send
-
doNext
-
skip for next source-code line; entering blocks
-
doNextAfterDelay
-
-
doNextOut
-
skip for next source-code line; leaving blocks
-
doNextOver
-
skip for next source-code line; skip over blocks
-
doNoTrace
-
-
doOpenReportMailApp
-
open a mail report tool
-
doRedefineMethodInReceiverClass
-
-
doResend
-
resend - the selected context is unwound and its message resent.
To be done after a cde change, to get nto the new method
-
doRestart
-
restart - the selected context will be restarted
-
doReturn
-
return - the selected context will do a ^nil
-
doSend
-
single send; reenter with next message send
-
doStep
-
skip for next send in selected method
-
doStep: lineNrOrNilOrMinus1
-
common helper for step, skip & next.
Arrange for single-stepping until we pass lineNr (if nonNil)
or to next line (if nil) or to next send (if -1)
-
doStepAfterDelay
-
-
doStepIn
-
step into the just called method;
same as selecting one above the current selected context
and then doing a step
-
doStepIn: lineNrOrNilOrMinus1
-
common helper for step, skip & next.
Arrange for single-stepping until we pass lineNr (if nonNil)
or to next line (if nil) or to next send (if -1)
-
doStop
-
stop the process (if it's running, otherwise this is a no-op)
-
doTerminate
-
terminate - the process has a chance for cleanup
-
doTrace
-
tracing - not really implemented ...
-
doTraceStep
-
tracestep - not implemented yet
-
doubleClickOnListEntry: lineNr
-
-
exit
-
exit from menu: immediate exit from smalltalk
-
findActiveHandler
-
find out active handlers, let user choose one of them,
and select the context
-
findContextForWhich: aBlock thenDo: additionalAction
-
-
findContextWithStringInSource
-
-
findContextWithValueInVariable
-
-
findHandlerFor
-
let user choose an exception class;
find and select the handling context for it
-
findHomeContext
-
still have to find it - home could be elsewhere (another process)
-
findNextExceptionHandlerContext
-
-
inspectContext
-
launch an inspector on the currently selected context
-
inspectContextsMethod
-
launch an inspector on the currently selected context's method
-
inspectProcessesApplication
-
inspect the application (of the process, if it is a GUI process)
-
inspectReceiver
-
launch an inspector on the currently selected context's receiver
-
inspectWidgetHierarchy
-
isKindOf:ApplicationModel
-
menuCloseAllDebuggers
-
-
menuCloseAllOtherDebuggers
-
-
middleButtonMenu
-
old leftover code for contextList's middleButtonMenu
-
notShowingDenseWalkbackHolder
-
-
notShowingSupportCode
-
-
openAboutThisApplication
-
opens an about box for this application.
-
openSettingsDialog
-
-
processesApplication
-
if the debugged process is a GUI process,
AND it has an application, return it.
Otherwise, return nil
-
quickTerminate
-
quick terminate - the process will get no chance for cleanup actions
-
rememberCallchain
-
remember the callchain in a classvar.
When entered the next time, highlight already entered contexts.
This makes it possible to identitfy the caller as the first common context
along the chain (i.e. the context which is responsible for the debugger to be entered)
-
selectContext: aContext
-
some contexts hidden?
-
selectedContext
-
could already be gone
-
showFullWalkback
-
double the number of contexts shown
-
showMore
-
double the number of contexts shown
-
showSupportCode
-
-
showingDenseWalkback
-
-
showingDenseWalkback: aBoolean
-
-
showingDenseWalkbackHolder
-
-
showingSupportCode
-
-
showingSupportCode: aBoolean
-
now only one flag!
-
showingVerboseWalkback
-
-
sizeChanged: how from: oldExtentOrNil
-
my view has changed the size (not the contents)
-
skip
-
skip for cursor line in selected method
-
skipForReturn
-
skip until the selected context is left.
-
skipUntilEntering
-
skip until some particular method is invoked.
-
toggleShowSupportCode
-
-
toggleVerboseWalkback
-
-
updateMenuItems
-
enable/disable some menu items, depending on the current selected context
menu & button actions-breakpoints
-
addBreakpoint
-
add a breakpoint on the selected context's method - if any
-
allowBreakPointsInDebugger
-
-
allowBreakPointsInDebugger: aBoolean
-
-
breakPointMenuSpec
-
change the label of the item named 'For Another Timeduration'
into 'For Another xxx', where xxx is the actual time duration it was
ignored before
-
doIgnoreBreakpoints
-
-
doNotIgnoreBreakpoints
-
-
ignoreAllAssertsForCurrentProcess
-
-
ignoreAllAssertsForThisReceiverClass
-
-
ignoreAllAssertsForever
-
-
ignoreAllAssertsIfCalledFromMethod: aMethod
-
-
ignoreAllAssertsUntilShiftKeyIsPressed
-
-
ignoreAllErrorsIfCalledFromMethod: aMethod
-
-
ignoreAllErrorsIfCalledFromMethod: aMethod action: actionSymbol
-
-
ignoreAllHaltsForCurrentProcess
-
-
ignoreAllHaltsForThisReceiverClass
-
-
ignoreAllHaltsForever
-
-
ignoreAllHaltsIfCalledFromMethod: aMethod
-
-
ignoreAllHaltsUntilAnotherTimeDurationElapsed
-
-
ignoreAllHaltsUntilShiftKeyIsPressed
-
-
ignoreAssertForCurrentProcess
-
-
ignoreAssertForThisReceiverClass
-
-
ignoreAssertForever
-
-
ignoreAssertIfCalledFromMethod: aMethod
-
-
ignoreAssertUntilAnotherTimeDurationElapsed
-
-
ignoreAssertUntilShiftKeyIsPressed
-
-
ignoreBreakpointsWithThisParameterForever
-
self addIgnoredHaltForCount:-1 orTimeDuration:nil orUntilShiftKey:false forAll:false.
-
ignoreBreakpointsWithThisParameterUntilShiftKeyIsPressed
-
-
ignoreErrorForCurrentProcess: actionSymbol
-
-
ignoreErrorForThisReceiverClass: actionSymbol
-
-
ignoreErrorForever: actionSymbol
-
-
ignoreErrorIfCalledFromMethod: aMethod
-
-
ignoreErrorIfCalledFromMethod: aMethod action: actionSymbol
-
-
ignoreErrorUntilAnotherTimeDurationElapsed: actionSymbol
-
-
ignoreErrorUntilShiftKeyIsPressed: actionSymbol
-
-
ignoreHaltForCurrentProcess
-
-
ignoreHaltForThisReceiverClass
-
-
ignoreHaltForever
-
-
ignoreHaltIfCalledFromMethod: aMethod
-
-
ignoreHaltUntilAnotherTimeDurationElapsed
-
-
ignoreHaltUntilShiftKeyIsPressed
-
-
menuForIgnoreAllBreakpointsIfCalledFromAnyOf
-
-
menuForIgnoreAllErrorsIfCalledFromAnyOf
-
-
menuForIgnoreBreakpointIfCalledFromAnyOf
-
-
menuForIgnoreBreakpointIfCalledFromAnyOfForAll: forAllHaltsBoolean
-
-
menuForIgnoreErrorAndProceedIfCalledFromAnyOf
-
-
menuForIgnoreErrorAndProceedIfCalledFromAnyOfForAll: forAllHaltsBoolean
-
-
menuForIgnoreErrorIfCalledFromAnyOf
-
-
menuForIgnoreErrorIfCalledFromAnyOfForAll: forAllHaltsBoolean
-
-
menuForIgnoreErrorIfCalledFromAnyOfForAll: forAllHaltsBoolean action: actionSymbol
-
-
openBreakPointBrowser
-
-
openIgnoreAllHaltsUntilTimeElapsedDialog
-
-
openIgnoreBreakpointsWithThisParameterNTimesDialog
-
-
openIgnoreBreakpointsWithThisParameterUntilTimeElapsedDialog
-
-
openIgnoreErrorNTimesDialog: actionSymbol
-
-
openIgnoreErrorUntilTimeElapsedDialog: actionSymbol
-
-
openIgnoreHaltNTimesDialog
-
-
openIgnoreHaltUntilTimeElapsedDialog
-
-
removeAllBreakpoints
-
remove all trace & breakpoints - if any
-
removeBreakpoint
-
remove breakpoint on the selected contexts method - if any
-
stopIgnoringHalts
-
misc
-
interestingContextIndexIn: arg
-
private
-
abortAllIsHandled
-
-
busy
-
-
exclusive: aBoolean
-
-
goodSkipUntilSelector
-
-
interruptProcessWith: aBlock
-
let inspected process do something, then update the context list
-
mayProceed: aBoolean
-
-
processPerform: aMessage
-
do something, then update the context list
-
redisplayBacktrace
-
force redisplay of the walkBack list; invoked when the
verbose-flag setting is changed
-
setContext: aContext releaseInspectors: releaseInspectors
-
show calling chain from aContext in the walk-back listview.
Most complications here arise from filtering less-interesting contexts
if not in verbose-context mode or when hiding implementation contexts.
There is a lot of heuristic magic here, to make the debugger as useful
as possible for the user (but not particularly for the debugger-developer).
On the fly, as we move along the contexts, update the isStoppedAtXXX booleans.
-
stepping
-
-
unstep
-
-
updateButtonsAndMenuItemsForContext: aContext
-
-
updateContext
-
private queries
-
canBrowseClassHierarchy
-
-
canBrowseFullClassProtocol
-
-
canBrowseImplementingClass
-
-
canBrowseProcessesApplication
-
-
canBrowseReceiversClass
-
-
canCloseAllDebuggers
-
-
canDefineMethod
-
-
canIgnoreBreakPoint
-
-
canInspectWidgetHierarchy
-
isKindOf: ApplicationModel
-
canRedefineMethodInReceiverClass
-
true if a context is selected, where an inherited method was called.
Used to enable the redefine menu option
-
canRestart
-
-
canReturn
-
-
canSendEmail
-
-
canShowMore
-
-
hasBlockContextSelected
-
even thoug we have a selection (hasSelection),
-
hasContextSelected
-
-
hasHaltsToIgnore
-
-
isAborting
-
-
isStoppedAtAssert
-
-
isStoppedAtBreakPointWithParameter
-
-
isStoppedAtError
-
^ self isStoppedAtHaltOrBreakPoint not
-
isStoppedAtErrorOrProceedableError
-
-
isStoppedAtHaltOrBreakPoint
-
-
isStoppedAtHaltOrBreakPointOrSelectedContextIsWrapped
-
-
isStoppedAtHaltOrBreakPointOrSelectedContextIsWrappedAndHasPreviousIgnoreTime
-
-
isStoppedAtProceedableError
-
-
isStoppedAtStatementBreakpoint
-
-
selectedContextIsWrapped
-
-
setOfHiddenCallingSelectors
-
-
setOfHiddenCallingSelectors: aCollectionOfSymbols
-
private-breakpoints
-
addIgnoredAssertForCount: countOrNil orTimeDuration: dTOrNil orUntilShiftKey: untilShiftKey orThisReceiverClass: forThisReceiverClass orCurrentProcess: forCurrentProcess orIfCalledFromMethod: ifCalledForMethodOrNil forAll: aBoolean
-
-
addIgnoredErrorForCount: countOrNil orTimeDuration: dTOrNil orUntilShiftKey: untilShiftKey orThisReceiverClass: forThisReceiverClass orCurrentProcess: forCurrentProcess orIfCalledFromMethod: ifCalledForMethodOrNil forAll: aBoolean
-
-
addIgnoredErrorForCount: countOrNil orTimeDuration: dTOrNil orUntilShiftKey: untilShiftKey orThisReceiverClass: forThisReceiverClass orCurrentProcess: forCurrentProcess orIfCalledFromMethod: ifCalledForMethodOrNil forAll: aBoolean action: actionSymbol
-
-
addIgnoredHaltForCount: countOrNil orTimeDuration: dTOrNil orUntilShiftKey: untilShiftKey orThisReceiverClass: forThisReceiverClass orCurrentProcess: forCurrentProcess orIfCalledFromMethod: ifCalledForMethodOrNil forAll: aBoolean
-
-
canAddBreakpoint
-
-
canRemoveAllBreakpoints
-
-
canRemoveBreakpoint
-
-
findAssertingContext
-
-
findContextWithAnySelector: selectors orMClass: mClass orWrapped: orWrappedBoolean
-
contextArray keysAndValuesDo:[:idx :con |
-
findErrorContext
-
-
findHaltingContext
-
-
findProceedableErrorContext
-
-
getIgnoredErrors
-
-
getIgnoredHalts
-
-
ignoreBreakpoints
-
-
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
-
ignoreErrorIn: methodOrNil line: lineNrOrNil forCount: countOrNil orTimeDuration: dTOrNil orUntilShiftKey: untilShiftKey orReceiverClass: receiverClassOrNil orProcess: processOrNil orIfCalledFromMethod: ifCalledFromMethodOrNil action: actionSymbol
-
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.
actionSymbol is either #abort or #proceed
-
ignoreHaltIn: haltingMethod at: lineNrOfHalt forCount: countOrNil orTimeDuration: dTOrNil orUntilShiftKey: untilShiftKey orReceiverClass: receiverClassOrNil orProcess: processOrNil orIfCalledFromMethod: ifCalledForMethodOrNil
-
-
ignoreHaltOrBreakpoint: type method: methodOrNil line: lineNrOfHaltOrNil parameter: parameterOrNil forCount: countOrNil orTimeDuration: dTOrNil orUntilShiftKey: untilShiftKey orReceiverClass: receiverClassOrNil orProcess: processOrNil orIfCalledFromMethod: ifCalledFromMethodOrNil
-
remember to ignore a breakpoint with a parameter (i.e. breakpoint:#cg)
for some number of invocations or until some time has elapsed.
With nil count and time arguments, such an ignored breakpoint is reactivated
-
removeInactiveIgnores
-
removes ignores for methods which are no longer present
-
setIgnoredErrors: aCollection
-
-
setIgnoredHalts: aCollection
-
private-cache handling
-
cacheMyself
-
remember myself for next debug session
-
isCached
-
tell whether we are a cached debugger
-
uncacheMyself
-
do not remember myself any longer for next debug session
private-code generation helpers
-
argumentNamesForNewMethodOfContext: context
-
generate argument names for a prototypeMethod for the message in context.
Used by doDefine and doRedefine
private-code view
-
codeAspect
-
-
explainSelection
-
-
findNodeForInterval: interval
-
-
findNodeIn: tree forInterval: interval
-
** This is an obsolete interface - do not use it (it may vanish in future versions) **
-
selectedInterval
-
-
withNodeValueAtInterval: interval do: aBlock
-
helper for tooltips and explain-selection;
evaluate aBlock with its value (if known) and a description of what it is
-
withValueAndDescriptionOfMessageNode: node do: aBlock
-
helper for tooltips and explain-selection;
evaluate aBlock with its value (if known) and a description of what it is.
Here, a value is only known iff the receiver class is known
or if there is exactly one implementor, AND the implementation returns a constant
-
withValueAndDescriptionOfVariableNode: node do: aBlock
-
helper for tooltips and explain-selection;
evaluate aBlock with its value (if known) and a description of what it is
private-context handling
-
contextListEntryFor: aContext
-
save generation of a single list entry of the context list
-
is: aHomeContext inCallingChainOf: aContext
-
-
isEnteredDueToBreakpointOrHalt
-
see if we came here due to a step interrupt
-
isHaltToBeIgnored
-
see if the current halt (if any) is in the ignore-list
-
isHaltToBeIgnoredFor: aContext
-
see if the current halt (if any) is in the ignore-list
-
setContext: aContext
-
show calling chain from aContext in the walk-back listview
-
setContextSkippingInterruptContexts: aContext
-
show calling chain from aContext in the walk-back listview.
Ignore any non-interesting interrupt-context.
-
showingContext1: aContext calling: calledContext
-
return false, if this context is to be skipped in the presented list.
Here, we hide some well known methods, which are usually not too interesting
(for example, intermediate performs, ensures or raise helpers);
the set of methods which are suppressed is my (claus's) own choice.
-
showingContext2: aContext nesting: nesting
-
return false, if this (intermediate) context is to be skipped.
Here, we hide some well known methods, which are usually not too interesting;
the set of methods which are suppressed is my (claus's) own choice.
-
stopShowingMoreContextsAfter: aContext
-
return true, if followup calling contexts are to be skipped.
False is returned here, as the regular debugger shows all contexts
up to the very first caller (in Process start).
Redefinable in special debuggers (expecco), which want to stop after
the activity >> execute context.
private-control loop
-
controlLoop
-
this is a kludge:
start a dispatchloop which exits when
either continue, return or step is pressed
-
controlLoopCatchingErrors
-
this is the debuggers own private event handling loop;
errors are caught, to prevent recursive debugger-invocations.
private-info
-
showError: message
-
consider this a kludge:
-
showTerminated
-
-
showValue: aValue
-
-
showWarning: aString
-
queries
-
canDefineForCallee: callee
-
again, pure heuristics here
-
canInstallCode
-
can we accept new code?
redefinable to return false in debuggers for remote code (bridged code)
-
showingAlreadyModifiedCode
-
testing
-
isDebugView
-
user interaction
-
checkIfCodeIsReallyModified
-
see if there is really a difference between the editor's contents
and the current method's source.
-
checkIfCodeIsReallyModifiedAndConfirmWith: questionString
-
if code was not modified or confirmation answered with 'ok',
return true (i.e. whatever user wants to do should be done).
Otherwise, return false
-
checkSelectionChangeAllowed
-
-
checkSelectionChangeAllowed: newSelection
-
check if the code was modified, when the selection changes.
Return true, if the selection SHOULD be changed (in the caller)
-
codeAccept: someCode
-
user wants some code to be recompiled
-
codeAccept: someCode inClass: aClass unwind: doUnwind category: category onCancel: cancelAction
-
user wants some code to be recompiled.
Optionally unwind stack to right above the changed method.
This undwind option is a leftover from times, when the debugger had no chance to
show the original code.
Now, it can, and got a choice-field to select between original and changed code.
So the undwind option is not longer used and probably completely obsolete now
(aka: this method is always called with doUnwind==false, these days)
-
codeAccept: someCode unwind: doUnwind category: givenCategoryOrNil onCancel: cancelAction
-
user wants some code to be recompiled
-
codeCompletion
-
I found this code 3 times (CodeView2, NewSystemBrowser and DebugView) - smell?
-
confirm: aString
-
open a modal yes-no dialog.
Redefined here, to answer true, if exclusice Debugger, which cannot handle popup boxes
-
doIt: theCode using: evaluatorClass in: aContext receiver: rec
-
called when user hits 'doIt' in the codeView.
Redefinable in subclasses (bridged code debuggers)
-
doShowSelection: lineNr
-
user clicked on a header line - show selected code in textView.
Also sent to autoselect an interesting context on entry.
-
hideStackInspector
-
-
methodCodeToggleChanged
-
-
processEvent: anEvent
-
filter keyboard events for popUp variable value display.
Return true, if I have eaten the event.
-
setCurrentMethod: aMethodOrNil
-
-
showSelection: lineNr
-
user clicked on a header line - show selected code in textView.
Also sent to autoselect an interesting context on entry.
-
showStackInspectorFor: con
-
-
updateContextInfoFor: aContext
-
additional info as-per selected context;
for now:
update:with:from: - show who was responsible
-
updateForContext: lineNr
-
show selected code for lineNr in contextList in textView.
Also used to autoselect an interesting context on entry.
CAVEAT: please, please refactor this beast.
IgnoredBreakpoint
IgnoredError
IgnoredHalt
IgnoredHaltOrBreakpoint
|