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