DebugView.st
author claus
Mon, 20 Dec 1993 00:44:35 +0100
changeset 13 145a9461122e
parent 10 46e0d4f2079f
child 14 e07eee5d93ca
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
     1
"
4
77d8e96499b2 *** empty log message ***
claus
parents: 2
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
571fd5eee315 Initial revision
claus
parents:
diff changeset
     4
571fd5eee315 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
571fd5eee315 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
571fd5eee315 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
571fd5eee315 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
571fd5eee315 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
571fd5eee315 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    11
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    12
571fd5eee315 Initial revision
claus
parents:
diff changeset
    13
StandardSystemView subclass:#DebugView
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    14
       instanceVariableNames:'busy haveControl exitAction canContinue
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    15
                              contextView codeView
571fd5eee315 Initial revision
claus
parents:
diff changeset
    16
                              receiverInspector contextInspector
571fd5eee315 Initial revision
claus
parents:
diff changeset
    17
                              contextArray selectedContext
571fd5eee315 Initial revision
claus
parents:
diff changeset
    18
                              catchBlock grabber traceView tracing
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    19
                              bigStep steppedContextAddress canAbort
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    20
                              abortButton
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    21
                              exclusive'
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    22
       classVariableNames:'cachedDebugger theOneAndOnlyNotifier'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    23
       poolDictionaries:''
571fd5eee315 Initial revision
claus
parents:
diff changeset
    24
       category:'Interface-Debugger'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    25
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    26
571fd5eee315 Initial revision
claus
parents:
diff changeset
    27
DebugView comment:'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    28
4
77d8e96499b2 *** empty log message ***
claus
parents: 2
diff changeset
    29
COPYRIGHT (c) 1989 by Claus Gittinger
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    30
              All Rights Reserved
571fd5eee315 Initial revision
claus
parents:
diff changeset
    31
571fd5eee315 Initial revision
claus
parents:
diff changeset
    32
this class implements a graphical debugger interface.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    33
The debugger usually sits on top of the faulting process,
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    34
stopping it from further event processing.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    35
The exception is when an error occurs within the dispatcher process
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    36
or in one of the eventhandler processes - in this case, the debugger
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    37
will sit on an exclusive display connection.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    38
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    39
$Header: /cvs/stx/stx/libtool/DebugView.st,v 1.6 1993-12-19 23:44:27 claus Exp $
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    40
571fd5eee315 Initial revision
claus
parents:
diff changeset
    41
written spring/summer 89 by claus
571fd5eee315 Initial revision
claus
parents:
diff changeset
    42
'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    43
571fd5eee315 Initial revision
claus
parents:
diff changeset
    44
!DebugView class methodsFor:'instance creation'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    45
571fd5eee315 Initial revision
claus
parents:
diff changeset
    46
new
571fd5eee315 Initial revision
claus
parents:
diff changeset
    47
    "return a DebugView - return the standard debugger if it already
571fd5eee315 Initial revision
claus
parents:
diff changeset
    48
     exists"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    49
571fd5eee315 Initial revision
claus
parents:
diff changeset
    50
    |debugger|
571fd5eee315 Initial revision
claus
parents:
diff changeset
    51
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    52
    "need a blocking debugger if no processes or 
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    53
     or if its a timing/interrupt process (because otherwise we would not get any 
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    54
     events here ..."
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    55
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    56
    ProcessorScheduler isPureEventDriven ifTrue:[
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    57
        cachedDebugger isNil ifTrue:[
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    58
            cachedDebugger := self newExclusive
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    59
        ].
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    60
        ^ cachedDebugger
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    61
    ].
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    62
    (Processor activeProcess priority > Processor userSchedulingPriority) ifTrue:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    63
        ^ self newExclusive
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    64
    ].
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    65
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    66
    (cachedDebugger isNil or:[cachedDebugger busy]) ifTrue:[
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    67
        debugger := super new.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    68
        debugger label:'Debugger'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
    69
        debugger icon:(Form fromFile:'Debugger.xbm' resolution:100).
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    70
    ] ifFalse:[
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    71
        debugger := cachedDebugger
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    72
    ].
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    73
    cachedDebugger isNil ifTrue:[
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    74
        cachedDebugger := debugger
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    75
    ].
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    76
    ^ debugger
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    77
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    78
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    79
newExclusive
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    80
    "return a debugger for exclusive display access"
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    81
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    82
    |debugger|
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    83
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    84
    debugger := super on:ModalDisplay.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    85
    debugger label:'Debugger'.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    86
    debugger icon:(Form fromFile:'Debugger.xbm' resolution:100).
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    87
    debugger exclusive:true.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    88
    ^ debugger
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    89
!
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    90
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    91
newDebugger
571fd5eee315 Initial revision
claus
parents:
diff changeset
    92
    "force creation of a new debugger"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    93
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
    94
    cachedDebugger := nil
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    95
571fd5eee315 Initial revision
claus
parents:
diff changeset
    96
    "DebugView newDebugger"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    97
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    98
571fd5eee315 Initial revision
claus
parents:
diff changeset
    99
enterWithMessage:aString
571fd5eee315 Initial revision
claus
parents:
diff changeset
   100
    "the standard way of entering the debugger - sent from Objects
571fd5eee315 Initial revision
claus
parents:
diff changeset
   101
     error- and halt messages"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   102
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   103
    |aDebugger name|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   104
571fd5eee315 Initial revision
claus
parents:
diff changeset
   105
    StepInterruptPending := nil.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   106
    aDebugger := self new.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   107
    name := Processor activeProcess nameOrId.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   108
    aDebugger label:aString , ' (process: ' , name , ')'.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   109
    aDebugger enter.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   110
    ^ nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   111
571fd5eee315 Initial revision
claus
parents:
diff changeset
   112
    "nil halt"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   113
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   114
571fd5eee315 Initial revision
claus
parents:
diff changeset
   115
enter
571fd5eee315 Initial revision
claus
parents:
diff changeset
   116
    "another way of entering the debugger"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   117
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   118
    |aDebugger name|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   119
571fd5eee315 Initial revision
claus
parents:
diff changeset
   120
    StepInterruptPending := nil.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   121
    aDebugger := self new.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   122
    name := Processor activeProcess nameOrId.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   123
    aDebugger label:'Debugger (process: ' , name , ')'.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   124
    aDebugger enter.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   125
    ^ nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   126
571fd5eee315 Initial revision
claus
parents:
diff changeset
   127
    "Debugger enter"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   128
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   129
571fd5eee315 Initial revision
claus
parents:
diff changeset
   130
!DebugView methodsFor:'initialization'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   131
571fd5eee315 Initial revision
claus
parents:
diff changeset
   132
initialize
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   133
    |v panel hpanel bpanel terminateButton continueButton stepButton sendButton|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   134
571fd5eee315 Initial revision
claus
parents:
diff changeset
   135
    super initialize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   136
571fd5eee315 Initial revision
claus
parents:
diff changeset
   137
    font := font on:device.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   138
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   139
    busy := false.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   140
    exitAction := nil.
10
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   141
    bigStep := false.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   142
571fd5eee315 Initial revision
claus
parents:
diff changeset
   143
    bpanel := HorizontalPanelView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   144
                        origin:(0.0 @ 0.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   145
                        extent:(1.0 @ (font height * 2))
571fd5eee315 Initial revision
claus
parents:
diff changeset
   146
                            in:self.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   147
    bpanel layout:#left.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   148
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   149
    terminateButton := Button
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   150
                        label:(resources at:'terminate')
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   151
                        action:[abortButton turnOffWithoutRedraw. self doTerminate]
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   152
                        in:bpanel.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   153
    abortButton := Button
2
claus
parents: 0
diff changeset
   154
                        label:(resources at:'abort')
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   155
                        action:[abortButton turnOffWithoutRedraw. self doAbort]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   156
                        in:bpanel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   157
    continueButton := Button
2
claus
parents: 0
diff changeset
   158
                        label:(resources at:'continue')
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   159
                        action:[continueButton turnOffWithoutRedraw. self doContinue]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   160
                        in:bpanel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   161
    stepButton := Button
2
claus
parents: 0
diff changeset
   162
                        label:(resources at:'step')
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   163
                        action:[stepButton turnOff. self doStep]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   164
                        in:bpanel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   165
    sendButton := Button
2
claus
parents: 0
diff changeset
   166
                        label:(resources at:'send')
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   167
                        action:[sendButton turnOff. self doSend]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   168
                        in:bpanel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   169
571fd5eee315 Initial revision
claus
parents:
diff changeset
   170
    panel := VariableVerticalPanel
571fd5eee315 Initial revision
claus
parents:
diff changeset
   171
                        origin:(0.0 @ bpanel height)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   172
                        corner:(1.0 @ 1.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   173
                            in:self.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   174
571fd5eee315 Initial revision
claus
parents:
diff changeset
   175
    v := ScrollableView for:SelectionInListView in:panel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   176
    v origin:(0.0 @ 0.0) corner:(1.0 @ 0.25).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   177
571fd5eee315 Initial revision
claus
parents:
diff changeset
   178
    contextView := v scrolledView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   179
    contextView action:[:lineNr | self showSelection:lineNr].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   180
571fd5eee315 Initial revision
claus
parents:
diff changeset
   181
    v := ScrollableView for:CodeView in:panel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   182
    v origin:(0.0 @ 0.25) corner:(1.0 @ 0.75).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   183
571fd5eee315 Initial revision
claus
parents:
diff changeset
   184
    codeView := v scrolledView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   185
571fd5eee315 Initial revision
claus
parents:
diff changeset
   186
    hpanel := VariableHorizontalPanel in:panel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   187
    hpanel origin:(0.0 @ 0.75) corner:(1.0 @ 1.0).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   188
571fd5eee315 Initial revision
claus
parents:
diff changeset
   189
    receiverInspector := InspectorView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   190
                                origin:(0.0 @ 0.0) corner:(0.5 @ 1.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   191
                                    in:hpanel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   192
571fd5eee315 Initial revision
claus
parents:
diff changeset
   193
    contextInspector := ContextInspectorView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   194
                                origin:(0.5 @ 0.0) corner:(1.0 @ 1.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   195
                                    in:hpanel
571fd5eee315 Initial revision
claus
parents:
diff changeset
   196
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   197
571fd5eee315 Initial revision
claus
parents:
diff changeset
   198
initializeMiddleButtonMenu
571fd5eee315 Initial revision
claus
parents:
diff changeset
   199
    |labels|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   200
2
claus
parents: 0
diff changeset
   201
    labels := resources array:#('continue'
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   202
                                'terminate'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   203
                                'abort'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   204
                                '-'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   205
                                'step'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   206
                                'trace step'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   207
                                'send'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   208
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   209
                                'trace'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   210
                                'untrace'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   211
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   212
                                '-'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   213
                                'resume'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   214
                                'restart'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   215
                                '-'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   216
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   217
                                'breakpoints'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   218
                                '-'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   219
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   220
                                'exit smalltalk'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   221
                              ).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   222
571fd5eee315 Initial revision
claus
parents:
diff changeset
   223
    contextView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   224
        middleButtonMenu:(PopUpMenu 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   225
                                labels:labels
571fd5eee315 Initial revision
claus
parents:
diff changeset
   226
                             selectors:#(doContinue
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   227
                                         doTerminate
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   228
                                         doAbort
571fd5eee315 Initial revision
claus
parents:
diff changeset
   229
                                         nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   230
                                         doStep
571fd5eee315 Initial revision
claus
parents:
diff changeset
   231
                                         doTraceStep
571fd5eee315 Initial revision
claus
parents:
diff changeset
   232
                                         doSend
571fd5eee315 Initial revision
claus
parents:
diff changeset
   233
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   234
                                         doTrace
571fd5eee315 Initial revision
claus
parents:
diff changeset
   235
                                         doNoTrace
571fd5eee315 Initial revision
claus
parents:
diff changeset
   236
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   237
                                         nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   238
                                         doResume
571fd5eee315 Initial revision
claus
parents:
diff changeset
   239
                                         doRestart
571fd5eee315 Initial revision
claus
parents:
diff changeset
   240
                                         nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   241
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   242
                                         doBreakpoints
571fd5eee315 Initial revision
claus
parents:
diff changeset
   243
                                         nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   244
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   245
                                         doExit)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   246
                                  receiver:self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   247
                                       for:contextView)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   248
571fd5eee315 Initial revision
claus
parents:
diff changeset
   249
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   250
571fd5eee315 Initial revision
claus
parents:
diff changeset
   251
addToCurrentProject
571fd5eee315 Initial revision
claus
parents:
diff changeset
   252
    "ignored here"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   253
571fd5eee315 Initial revision
claus
parents:
diff changeset
   254
    ^ self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   255
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   256
571fd5eee315 Initial revision
claus
parents:
diff changeset
   257
createOnTop
571fd5eee315 Initial revision
claus
parents:
diff changeset
   258
    ^ false "true"
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   259
!
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   260
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   261
realize
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   262
    super realize.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   263
    exclusive ifTrue:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   264
        windowGroup := nil
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   265
    ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   266
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   267
571fd5eee315 Initial revision
claus
parents:
diff changeset
   268
!DebugView methodsFor:'error handling'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   269
571fd5eee315 Initial revision
claus
parents:
diff changeset
   270
catch:aSymbol with:someArgument for:anObject
571fd5eee315 Initial revision
claus
parents:
diff changeset
   271
    "this one is sent when an error occurs while in the debugger -
571fd5eee315 Initial revision
claus
parents:
diff changeset
   272
     we dont want another debugger to come up - do we ?"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   273
571fd5eee315 Initial revision
claus
parents:
diff changeset
   274
    anObject class name print.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   275
    ' ' print.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   276
    aSymbol print. '(' print. someArgument print.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   277
    ') within debugger cought' printNewline.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   278
    (aSymbol == #halt:) ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   279
        catchBlock value
571fd5eee315 Initial revision
claus
parents:
diff changeset
   280
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   281
    ^ nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   282
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   283
571fd5eee315 Initial revision
claus
parents:
diff changeset
   284
!DebugView methodsFor:'interrupt handling'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   285
571fd5eee315 Initial revision
claus
parents:
diff changeset
   286
stepInterrupt
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   287
    |where here s|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   288
10
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   289
    "is this for a send or a step ?"
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   290
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   291
    bigStep ifTrue:[
10
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   292
        where := thisContext.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   293
        where := where sender.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   294
        where := where sender.     
571fd5eee315 Initial revision
claus
parents:
diff changeset
   295
        here := where.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   296
        (ObjectMemory addressOf:where) == steppedContextAddress  ifFalse:[
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   297
            "
571fd5eee315 Initial revision
claus
parents:
diff changeset
   298
             check if we are in a context below steppedContext
571fd5eee315 Initial revision
claus
parents:
diff changeset
   299
             (i.e. if steppedContext can be reached from
571fd5eee315 Initial revision
claus
parents:
diff changeset
   300
              interrupted context. Not using context-ref but its
571fd5eee315 Initial revision
claus
parents:
diff changeset
   301
              address to avoid creation of many useless contexts..)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   302
            "
571fd5eee315 Initial revision
claus
parents:
diff changeset
   303
571fd5eee315 Initial revision
claus
parents:
diff changeset
   304
            [where notNil] whileTrue:[
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   305
                (ObjectMemory addressOf:where) == steppedContextAddress ifTrue:[
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   306
                    tracing ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   307
                        here printString printNewline
571fd5eee315 Initial revision
claus
parents:
diff changeset
   308
                    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   309
                    where := nil. here := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   310
                    "yes - continue"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   311
                    "scedule another stepInterrupt
571fd5eee315 Initial revision
claus
parents:
diff changeset
   312
                     - must flush caches since optimized methods not always
571fd5eee315 Initial revision
claus
parents:
diff changeset
   313
                     look for pending interrupts"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   314
                    ObjectMemory flushInlineCaches.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   315
                    StepInterruptPending := true.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   316
                    InterruptPending := true.
10
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   317
                    InStepInterrupt := nil.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   318
                    ^ nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   319
                ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   320
                where := where sender
571fd5eee315 Initial revision
claus
parents:
diff changeset
   321
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   322
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   323
        bigStep := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   324
        tracing := false.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   325
        s := 'after step'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   326
    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   327
        steppedContextAddress := nil.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   328
        s := 'after send'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   329
    ].
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   330
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   331
    name := Processor activeProcess name.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   332
    name isNil ifTrue:[
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   333
        name := Processor activeProcess id printString.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   334
    ].
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   335
    self label:(s , ' (process: ' , name , ')').
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   336
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   337
    "release refs to context"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   338
    where := nil. here := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   339
    self enter
571fd5eee315 Initial revision
claus
parents:
diff changeset
   340
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   341
571fd5eee315 Initial revision
claus
parents:
diff changeset
   342
!DebugView methodsFor:'basic'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   343
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   344
busy
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   345
    ^ busy
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   346
!
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   347
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   348
exclusive:aBoolean
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   349
    exclusive := aBoolean
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   350
!
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   351
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   352
enter
571fd5eee315 Initial revision
claus
parents:
diff changeset
   353
    "enter the debugger - get and display the context, then start an
571fd5eee315 Initial revision
claus
parents:
diff changeset
   354
     exclusive event loop on top of eveything else"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   355
571fd5eee315 Initial revision
claus
parents:
diff changeset
   356
    |where con oldRecursionLimit selection|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   357
571fd5eee315 Initial revision
claus
parents:
diff changeset
   358
    oldRecursionLimit := RecursionLimit.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   359
    RecursionLimit := nil.
10
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   360
    bigStep := false.
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   361
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   362
    "if debugger is entered while a box has grabbed the
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   363
     pointer, we must ungrab - otherwise X wont talk to
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   364
     us here"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   365
571fd5eee315 Initial revision
claus
parents:
diff changeset
   366
    ActiveGrab notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   367
        grabber := ActiveGrab.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   368
        ActiveGrab device ungrabPointer.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   369
        ActiveGrab device synchronizeOutput.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   370
        ActiveGrab := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   371
    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   372
        grabber := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   373
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   374
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   375
    drawableId notNil ifTrue:[
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   376
        "not the first time - realize at old position"
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   377
        self rerealize
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   378
    ] ifFalse:[
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   379
        exclusive ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   380
            windowGroup isNil ifTrue:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   381
                windowGroup := WindowGroup new.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   382
                windowGroup addTopView:self.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   383
            ].
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   384
        ].
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   385
        self realize
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   386
    ].
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   387
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   388
    self raise.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   389
    Display synchronizeOutput.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   390
571fd5eee315 Initial revision
claus
parents:
diff changeset
   391
    where := thisContext.
10
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   392
    where := where sender.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   393
    where notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   394
        (where receiver == DebugView) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   395
            where := where sender
571fd5eee315 Initial revision
claus
parents:
diff changeset
   396
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   397
        "where is now interrupted methods context"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   398
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   399
    self setContext:where.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   400
571fd5eee315 Initial revision
claus
parents:
diff changeset
   401
    "select context, where halt was ..."
571fd5eee315 Initial revision
claus
parents:
diff changeset
   402
    ( #(halt error raise) includes:where sender selector) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   403
        selection := 3
571fd5eee315 Initial revision
claus
parents:
diff changeset
   404
    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   405
        ( #(halt: error:) includes:where selector) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   406
            selection := 2
571fd5eee315 Initial revision
claus
parents:
diff changeset
   407
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   408
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   409
571fd5eee315 Initial revision
claus
parents:
diff changeset
   410
    where := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   411
571fd5eee315 Initial revision
claus
parents:
diff changeset
   412
    "if we came here by a big-step, show the method where we are"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   413
    steppedContextAddress notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   414
        selection := 3
571fd5eee315 Initial revision
claus
parents:
diff changeset
   415
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   416
571fd5eee315 Initial revision
claus
parents:
diff changeset
   417
    selection notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   418
        self showSelection:selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   419
        contextView selection:selection
571fd5eee315 Initial revision
claus
parents:
diff changeset
   420
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   421
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   422
    canAbort := false.
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   423
    1 to:contextArray size do:[:index |
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   424
        (#(doIt printIt inspectIt)
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   425
        includes:(contextArray at:index) selector) ifTrue:[
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   426
            canAbort := true
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   427
        ]
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   428
    ].
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   429
    canAbort ifTrue:[
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   430
        abortButton enable
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   431
    ] ifFalse:[
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   432
        abortButton disable
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   433
    ].
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   434
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   435
    canContinue := true.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   436
    self controlLoop.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   437
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   438
    "kludge: look for a doIt, printIt or inspectIt frame for abort"
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   439
    (canAbort and:[exitAction == #abort]) ifTrue:[
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   440
        selectedContext := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   441
        1 to:contextArray size do:[:index |
571fd5eee315 Initial revision
claus
parents:
diff changeset
   442
            (#(doIt printIt inspectIt)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   443
                includes:(contextArray at:index) selector) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   444
                selectedContext := contextArray at:index
571fd5eee315 Initial revision
claus
parents:
diff changeset
   445
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   446
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   447
        exitAction := #resume
571fd5eee315 Initial revision
claus
parents:
diff changeset
   448
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   449
571fd5eee315 Initial revision
claus
parents:
diff changeset
   450
    contextArray := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   451
571fd5eee315 Initial revision
claus
parents:
diff changeset
   452
    (exitAction == #step) ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   453
        self unrealize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   454
        device synchronizeOutput.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   455
        (exitAction == #resume) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   456
            selectedContext notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   457
                con := selectedContext.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   458
                selectedContext := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   459
                ErrorActive := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   460
                InInterrupt := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   461
                RecursionLimit := oldRecursionLimit.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   462
                con unwind.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   463
                'cannot resume selected context' printNewline
571fd5eee315 Initial revision
claus
parents:
diff changeset
   464
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   465
        ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   466
            (exitAction == #restart) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   467
                selectedContext notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   468
                    con := selectedContext.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   469
                    selectedContext := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   470
                    ErrorActive := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   471
                    InInterrupt := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   472
                    RecursionLimit := oldRecursionLimit.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   473
                    con restart.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   474
                    'cannot restart selected context' printNewline
571fd5eee315 Initial revision
claus
parents:
diff changeset
   475
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   476
            ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   477
                (exitAction == #terminate) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   478
                    selectedContext := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   479
                    ErrorActive := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   480
                    InInterrupt := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   481
                    RecursionLimit := oldRecursionLimit.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   482
                    Processor activeProcess terminate.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   483
                    'cannot terminate process' printNewline
571fd5eee315 Initial revision
claus
parents:
diff changeset
   484
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   485
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   486
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   487
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   488
571fd5eee315 Initial revision
claus
parents:
diff changeset
   489
    selectedContext := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   490
571fd5eee315 Initial revision
claus
parents:
diff changeset
   491
    grabber notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   492
        grabber device grabPointerIn:(grabber id).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   493
        ActiveGrab := grabber
571fd5eee315 Initial revision
claus
parents:
diff changeset
   494
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   495
571fd5eee315 Initial revision
claus
parents:
diff changeset
   496
    RecursionLimit := oldRecursionLimit.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   497
    (exitAction == #step) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   498
        "scedule another stepInterrupt
571fd5eee315 Initial revision
claus
parents:
diff changeset
   499
         - must flush caches since optimized methods not always
571fd5eee315 Initial revision
claus
parents:
diff changeset
   500
         look for pending interrupts"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   501
        ObjectMemory flushInlineCaches.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   502
2
claus
parents: 0
diff changeset
   503
        ObjectMemory stepInterruptHandler:self.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   504
        StepInterruptPending := true.
10
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   505
        InterruptPending := true.
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   506
        InStepInterrupt := nil
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   507
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   508
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   509
571fd5eee315 Initial revision
claus
parents:
diff changeset
   510
controlLoop
571fd5eee315 Initial revision
claus
parents:
diff changeset
   511
    "this is a kludge:
571fd5eee315 Initial revision
claus
parents:
diff changeset
   512
        start a dispatchloop which exits when
571fd5eee315 Initial revision
claus
parents:
diff changeset
   513
        either continue, resume or step is pressed
571fd5eee315 Initial revision
claus
parents:
diff changeset
   514
    "
571fd5eee315 Initial revision
claus
parents:
diff changeset
   515
571fd5eee315 Initial revision
claus
parents:
diff changeset
   516
    Smalltalk at:#ErrorHandler put:self.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   517
    haveControl := true.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   518
    [haveControl] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   519
        self controlLoopCatchingErrors
571fd5eee315 Initial revision
claus
parents:
diff changeset
   520
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   521
    catchBlock := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   522
    Smalltalk at:#ErrorHandler put:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   523
571fd5eee315 Initial revision
claus
parents:
diff changeset
   524
    codeView contents:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   525
    codeView acceptAction:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   526
    contextView contents:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   527
    receiverInspector noChoice.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   528
    contextInspector noChoice
571fd5eee315 Initial revision
claus
parents:
diff changeset
   529
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   530
571fd5eee315 Initial revision
claus
parents:
diff changeset
   531
controlLoopCatchingErrors
571fd5eee315 Initial revision
claus
parents:
diff changeset
   532
    "setup a catch-block"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   533
    catchBlock := [^ nil].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   534
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   535
    exclusive ifTrue:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   536
        "if we do not have multiple processes or its a system process
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   537
         we start another dispatch loop, which exits when
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   538
         either continue, resume or step is pressed
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   539
         or (via the catchBlock) if an error occurs.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   540
         Since our display is an extra exclusive one (ModalDisplay)
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   541
         all processing for normal views stops here ...
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   542
        "
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   543
        device dispatchWhile:[haveControl]
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   544
    ] ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   545
        "we do have multiple processes -
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   546
         simply enter the DebugViews-Windowgroup event loop.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   547
         effectively suspending event processing for the currently 
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   548
         active group.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   549
        "
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   550
        self windowGroup eventLoop
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   551
    ]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   552
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   553
571fd5eee315 Initial revision
claus
parents:
diff changeset
   554
setContext:aContext
571fd5eee315 Initial revision
claus
parents:
diff changeset
   555
    |con text
571fd5eee315 Initial revision
claus
parents:
diff changeset
   556
     index "{ Class: SmallInteger }" |
571fd5eee315 Initial revision
claus
parents:
diff changeset
   557
571fd5eee315 Initial revision
claus
parents:
diff changeset
   558
    aContext isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   559
        text := Array with:'** no context **'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   560
        contextArray := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   561
    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   562
        con := aContext.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   563
        index := 0.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   564
        [con notNil] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   565
            index := index + 1.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   566
            con := con sender
571fd5eee315 Initial revision
claus
parents:
diff changeset
   567
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   568
        text := Array new:index.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   569
        contextArray := Array new:index.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   570
        con := aContext.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   571
        index := 1.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   572
        [con notNil] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   573
            contextArray at:index put:con.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   574
            text at:index put:(con printString).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   575
            index := index + 1.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   576
            con := con sender
571fd5eee315 Initial revision
claus
parents:
diff changeset
   577
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   578
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   579
    contextView list:text.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   580
    receiverInspector noChoice.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   581
    contextInspector noChoice
571fd5eee315 Initial revision
claus
parents:
diff changeset
   582
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   583
571fd5eee315 Initial revision
claus
parents:
diff changeset
   584
!DebugView methodsFor:'user interaction'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   585
571fd5eee315 Initial revision
claus
parents:
diff changeset
   586
showSelection:lineNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   587
    "user clicked on a header line - show selected code in textView"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   588
571fd5eee315 Initial revision
claus
parents:
diff changeset
   589
    |con homeContext sel method code
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   590
     implementorClass lineNrInMethod rec|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   591
571fd5eee315 Initial revision
claus
parents:
diff changeset
   592
    contextArray notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   593
        con := contextArray at:lineNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   594
        lineNrInMethod := con lineNumber.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   595
        con isBlockContext ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   596
            homeContext := con methodHome
571fd5eee315 Initial revision
claus
parents:
diff changeset
   597
        ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   598
            homeContext := con
571fd5eee315 Initial revision
claus
parents:
diff changeset
   599
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   600
        sel := homeContext selector.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   601
        sel notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   602
            implementorClass := homeContext searchClass 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   603
                                        whichClassImplements:sel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   604
            implementorClass isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   605
                codeView contents:'** no method - no source **'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   606
            ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   607
                method := implementorClass compiledMethodAt:sel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   608
                code := method source.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   609
                code isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   610
                    codeView contents:'** no source **'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   611
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   612
            ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   613
            code isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   614
                codeView acceptAction:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   615
                contextInspector noChoice
571fd5eee315 Initial revision
claus
parents:
diff changeset
   616
            ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   617
                codeView contents:code.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   618
                (lineNrInMethod ~~ 0) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   619
                    lineNrInMethod > codeView list size ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   620
                        lineNrInMethod := codeView list size + 1
571fd5eee315 Initial revision
claus
parents:
diff changeset
   621
                    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   622
                    codeView selectLine:lineNrInMethod.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   623
                    codeView makeSelectionVisible
571fd5eee315 Initial revision
claus
parents:
diff changeset
   624
                ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   625
                codeView acceptAction:[:code | self codeAccept:code]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   626
            ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   627
            contextInspector inspect:con.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   628
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   629
            "fetch rec here - so we wont need con in doItAction"
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   630
            rec := homeContext receiver.
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   631
            receiverInspector inspect:rec.
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   632
            codeView doItAction:[:theCode |
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   633
                             rec class compiler evaluate:theCode 
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   634
                                                receiver:rec
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   635
                                               notifying:codeView
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   636
            ]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   637
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   638
        selectedContext := homeContext
571fd5eee315 Initial revision
claus
parents:
diff changeset
   639
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   640
    "clear out locals to prevent keeping around unneeded contexts (due to the
571fd5eee315 Initial revision
claus
parents:
diff changeset
   641
     block held in codeView).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   642
     (not really needed, since stuff gets collected away sooner or later ..."
571fd5eee315 Initial revision
claus
parents:
diff changeset
   643
571fd5eee315 Initial revision
claus
parents:
diff changeset
   644
    con := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   645
    homeContext := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   646
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   647
571fd5eee315 Initial revision
claus
parents:
diff changeset
   648
codeAccept:someCode
571fd5eee315 Initial revision
claus
parents:
diff changeset
   649
    "user wants some code to be recompiled - must unwind stack since everything above
571fd5eee315 Initial revision
claus
parents:
diff changeset
   650
     and including selected method cannot be continued"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   651
571fd5eee315 Initial revision
claus
parents:
diff changeset
   652
    "walk up context chain and find highest context which is either the selected context,
571fd5eee315 Initial revision
claus
parents:
diff changeset
   653
     or - if its a block-context - whose home is the selected context"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   654
571fd5eee315 Initial revision
claus
parents:
diff changeset
   655
    |con top sel implementorClass method newMethod|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   656
571fd5eee315 Initial revision
claus
parents:
diff changeset
   657
    codeView cursor:Cursor execute.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   658
571fd5eee315 Initial revision
claus
parents:
diff changeset
   659
    con := selectedContext.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   660
    top := con.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   661
    [con notNil] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   662
        (con methodHome == selectedContext) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   663
            top := con
571fd5eee315 Initial revision
claus
parents:
diff changeset
   664
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   665
        con := con sender
571fd5eee315 Initial revision
claus
parents:
diff changeset
   666
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   667
    "now, remove everything up to and including top from context chain"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   668
571fd5eee315 Initial revision
claus
parents:
diff changeset
   669
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   670
    self setContext:(top sender).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   671
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   672
571fd5eee315 Initial revision
claus
parents:
diff changeset
   673
    sel := selectedContext selector.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   674
    implementorClass := selectedContext searchClass whichClassImplements:sel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   675
    method := implementorClass compiledMethodAt:sel.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   676
    newMethod := implementorClass compiler compile:someCode
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   677
                                          forClass:implementorClass
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   678
                                        inCategory:(method category)
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   679
                                         notifying:codeView.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   680
571fd5eee315 Initial revision
claus
parents:
diff changeset
   681
    "if it worked, remove everything up to and including top
571fd5eee315 Initial revision
claus
parents:
diff changeset
   682
     from context chain"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   683
571fd5eee315 Initial revision
claus
parents:
diff changeset
   684
    (newMethod notNil and:[newMethod ~~ #Error]) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   685
        self setContext:(top sender).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   686
571fd5eee315 Initial revision
claus
parents:
diff changeset
   687
        "continue/step is no longer possible"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   688
        canContinue := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   689
        self showSelection:1.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   690
        exitAction := #resume
571fd5eee315 Initial revision
claus
parents:
diff changeset
   691
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   692
    codeView cursor:Cursor normal
571fd5eee315 Initial revision
claus
parents:
diff changeset
   693
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   694
571fd5eee315 Initial revision
claus
parents:
diff changeset
   695
destroy
571fd5eee315 Initial revision
claus
parents:
diff changeset
   696
    "closing the debugger implies an abort"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   697
571fd5eee315 Initial revision
claus
parents:
diff changeset
   698
    contextView middleButtonMenu hide.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   699
    receiverInspector noChoice.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   700
    contextInspector noChoice.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   701
    self doAbort
571fd5eee315 Initial revision
claus
parents:
diff changeset
   702
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   703
571fd5eee315 Initial revision
claus
parents:
diff changeset
   704
doExit
571fd5eee315 Initial revision
claus
parents:
diff changeset
   705
    "exit from menu: immediate exit from smalltalk"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   706
571fd5eee315 Initial revision
claus
parents:
diff changeset
   707
    Smalltalk exit
571fd5eee315 Initial revision
claus
parents:
diff changeset
   708
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   709
571fd5eee315 Initial revision
claus
parents:
diff changeset
   710
doBreakpoints
571fd5eee315 Initial revision
claus
parents:
diff changeset
   711
    ^ self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   712
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   713
571fd5eee315 Initial revision
claus
parents:
diff changeset
   714
doSend
571fd5eee315 Initial revision
claus
parents:
diff changeset
   715
    "send from menu"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   716
571fd5eee315 Initial revision
claus
parents:
diff changeset
   717
    canContinue ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   718
        steppedContextAddress := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   719
        haveControl := false.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   720
        exitAction := #step.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   721
        ProcessorScheduler isPureEventDriven ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   722
            "exit private event-loop"
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   723
            catchBlock value
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   724
        ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   725
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   726
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   727
571fd5eee315 Initial revision
claus
parents:
diff changeset
   728
doStep
571fd5eee315 Initial revision
claus
parents:
diff changeset
   729
    "step from menu"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   730
571fd5eee315 Initial revision
claus
parents:
diff changeset
   731
    canContinue ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   732
        selectedContext notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   733
            bigStep := true.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   734
            steppedContextAddress := ObjectMemory addressOf:selectedContext
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   735
        ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   736
            bigStep := true.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   737
            steppedContextAddress := ObjectMemory addressOf:(contextArray at:2)
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   738
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   739
        haveControl := false.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   740
        exitAction := #step.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   741
        ProcessorScheduler isPureEventDriven ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   742
            "exit private event-loop"
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   743
            catchBlock value
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   744
        ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   745
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   746
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   747
571fd5eee315 Initial revision
claus
parents:
diff changeset
   748
doTraceStep
571fd5eee315 Initial revision
claus
parents:
diff changeset
   749
    "tracestep from menu"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   750
571fd5eee315 Initial revision
claus
parents:
diff changeset
   751
    canContinue ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   752
        tracing := true.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   753
        self doStep
571fd5eee315 Initial revision
claus
parents:
diff changeset
   754
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   755
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   756
571fd5eee315 Initial revision
claus
parents:
diff changeset
   757
doAbort
571fd5eee315 Initial revision
claus
parents:
diff changeset
   758
    "abort from menu"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   759
571fd5eee315 Initial revision
claus
parents:
diff changeset
   760
    steppedContextAddress := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   761
    haveControl := false.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   762
    exitAction := #abort.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   763
    ProcessorScheduler isPureEventDriven ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   764
        "exit private event-loop"
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   765
        catchBlock value
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   766
    ].
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   767
    ^ self.
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   768
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   769
"obsolete ..."
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   770
    Processor activeProcess id == 0 ifTrue:[
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   771
        "dont allow termination of main-thread"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   772
        exitAction := #abort
571fd5eee315 Initial revision
claus
parents:
diff changeset
   773
    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   774
        exitAction := #terminate 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   775
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   776
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   777
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   778
doTerminate
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   779
    "terminate from menu"
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   780
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   781
    steppedContextAddress := nil.
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   782
    haveControl := false.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   783
    exitAction := #terminate. 
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   784
    ProcessorScheduler isPureEventDriven ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   785
        "exit private event-loop"
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   786
        catchBlock value
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   787
    ].
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   788
!
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   789
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   790
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   791
doResume
571fd5eee315 Initial revision
claus
parents:
diff changeset
   792
    "resume from menu"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   793
571fd5eee315 Initial revision
claus
parents:
diff changeset
   794
    steppedContextAddress := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   795
    haveControl := false.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   796
    exitAction := #resume.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   797
    ProcessorScheduler isPureEventDriven ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   798
        "exit private event-loop"
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   799
        catchBlock value
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   800
    ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   801
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   802
571fd5eee315 Initial revision
claus
parents:
diff changeset
   803
doRestart
571fd5eee315 Initial revision
claus
parents:
diff changeset
   804
    "restart from menu"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   805
571fd5eee315 Initial revision
claus
parents:
diff changeset
   806
    steppedContextAddress := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   807
    haveControl := false.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   808
    exitAction := #restart.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   809
    ProcessorScheduler isPureEventDriven ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   810
        "exit private event-loop"
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   811
        catchBlock value
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   812
    ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   813
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   814
571fd5eee315 Initial revision
claus
parents:
diff changeset
   815
doTrace
571fd5eee315 Initial revision
claus
parents:
diff changeset
   816
    |v b|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   817
571fd5eee315 Initial revision
claus
parents:
diff changeset
   818
    traceView isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   819
        v := StandardSystemView on:Display.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   820
        v label:'Debugger-Trace'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   821
        v icon:icon.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   822
571fd5eee315 Initial revision
claus
parents:
diff changeset
   823
        b := Button label:'untrace' in:v.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   824
        b origin:(0 @ 0) extent:(1.0 @ (b height)).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   825
        b action:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   826
            StepInterruptPending := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   827
            tracing := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   828
            v unrealize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   829
            traceView := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   830
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   831
        traceView := ScrollableView for:TextCollector in:v.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   832
        traceView origin:(0 @ (b height))
571fd5eee315 Initial revision
claus
parents:
diff changeset
   833
                  extent:[v width @ (v height - b height)]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   834
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   835
    v realize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   836
    tracing := true.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   837
    self doStep
571fd5eee315 Initial revision
claus
parents:
diff changeset
   838
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   839
571fd5eee315 Initial revision
claus
parents:
diff changeset
   840
doNoTrace
571fd5eee315 Initial revision
claus
parents:
diff changeset
   841
    traceView notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   842
        traceView topView destroy.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   843
        traceView := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   844
        tracing := false
571fd5eee315 Initial revision
claus
parents:
diff changeset
   845
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   846
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   847
571fd5eee315 Initial revision
claus
parents:
diff changeset
   848
doContinue
571fd5eee315 Initial revision
claus
parents:
diff changeset
   849
    "continue from menu"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   850
571fd5eee315 Initial revision
claus
parents:
diff changeset
   851
    canContinue ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   852
        steppedContextAddress := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   853
        tracing := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   854
        haveControl := false.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   855
        exitAction := #continue.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   856
        ProcessorScheduler isPureEventDriven ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   857
            "exit private event-loop"
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   858
            catchBlock value
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   859
        ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   860
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   861
! !