DebugView.st
author claus
Mon, 22 Aug 1994 20:07:28 +0200
changeset 37 50f59bad66b1
parent 35 cd5cb075fd6a
child 45 950b84ba89e6
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
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
    20
                              abortButton terminateButton continueButton
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    21
                              stepButton sendButton returnButton restartButton
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    22
                              exclusive inspecting nChainShown
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    23
                              processList'
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    24
       classVariableNames:'CachedDebugger CachedExclusive'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    25
       poolDictionaries:''
571fd5eee315 Initial revision
claus
parents:
diff changeset
    26
       category:'Interface-Debugger'
571fd5eee315 Initial revision
claus
parents:
diff changeset
    27
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    28
571fd5eee315 Initial revision
claus
parents:
diff changeset
    29
DebugView comment:'
4
77d8e96499b2 *** empty log message ***
claus
parents: 2
diff changeset
    30
COPYRIGHT (c) 1989 by Claus Gittinger
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    31
              All Rights Reserved
571fd5eee315 Initial revision
claus
parents:
diff changeset
    32
37
50f59bad66b1 *** empty log message ***
claus
parents: 35
diff changeset
    33
$Header: /cvs/stx/stx/libtool/DebugView.st,v 1.13 1994-08-22 18:07:04 claus Exp $
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    34
'!
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    35
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    36
!DebugView class methodsFor:'documentation'!
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    37
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    38
copyright
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    39
"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    40
 COPYRIGHT (c) 1989 by Claus Gittinger
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    41
              All Rights Reserved
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    42
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    43
 This software is furnished under a license and may be used
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    44
 only in accordance with the terms of that license and with the
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    45
 inclusion of the above copyright notice.   This software may not
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    46
 be provided or otherwise made available to, or used by, any
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    47
 other person.  No title to or ownership of the software is
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    48
 hereby transferred.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    49
"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    50
!
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    51
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    52
version
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    53
"
37
50f59bad66b1 *** empty log message ***
claus
parents: 35
diff changeset
    54
$Header: /cvs/stx/stx/libtool/DebugView.st,v 1.13 1994-08-22 18:07:04 claus Exp $
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    55
"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    56
!
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    57
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    58
documentation
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    59
"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    60
    this class implements a graphical debugger interface.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    61
    The debugger usually sits on top of the faulting process,
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    62
    taking over its event processing. Thus only the 'stopped' process is affected;
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    63
    other processes continue to respond to events.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    64
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    65
    The one exception is when an error occurs within the dispatcher process
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    66
    or in one of the eventhandler processes - in this case, the debugger
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    67
    will sit on an exclusive display connection.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    68
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    69
    The whole debugging will be changed, once the required process primitives
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    70
    are available, which allow control of another processes execution
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    71
    (i.e. single-step, restart & return). The setup will be changed then,
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    72
    to have the debugger control the debuggee (i.e. two processes)
35
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
    73
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
    74
    See additional information in 'doc/misc/debugger.doc'.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    75
"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    76
! !
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    77
571fd5eee315 Initial revision
claus
parents:
diff changeset
    78
!DebugView class methodsFor:'instance creation'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
    79
571fd5eee315 Initial revision
claus
parents:
diff changeset
    80
new
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    81
    "return a DebugView - return a cached debugger if it already
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    82
     exists"
571fd5eee315 Initial revision
claus
parents:
diff changeset
    83
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    84
    |debugger active|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
    85
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    86
    "need a blocking debugger if no processes or 
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    87
     or if its a timing/interrupt process 
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    88
     (because otherwise we would not get any events here ..."
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    89
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    90
    active := Processor activeProcess.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
    91
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    92
    (ProcessorScheduler isPureEventDriven 
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    93
    or:[(active priority > Processor userSchedulingPriority)
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    94
    or:[active nameOrId endsWith:'dispatcher']]) ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    95
        CachedExclusive isNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    96
            debugger := self newExclusive
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    97
        ] ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    98
            debugger := CachedExclusive.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
    99
            CachedExclusive := nil.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   100
        ].
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   101
    ] ifFalse:[
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   102
        CachedDebugger isNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   103
            debugger := super new.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   104
            debugger label:'Debugger'.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   105
            debugger icon:(Form fromFile:'Debugger.xbm' resolution:100).
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   106
        ] ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   107
            debugger := CachedDebugger.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   108
            CachedDebugger := nil.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   109
        ]
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   110
    ].
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   111
    ^ debugger
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   112
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   113
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   114
newExclusive
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   115
    "return a debugger for exclusive display access"
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   116
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   117
    |debugger|
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   118
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   119
    debugger := super on:ModalDisplay.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   120
    debugger label:'Debugger'.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   121
    debugger icon:(Form fromFile:'Debugger.xbm' resolution:100).
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   122
    debugger exclusive:true.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   123
    ^ debugger
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   124
!
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   125
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   126
newDebugger
571fd5eee315 Initial revision
claus
parents:
diff changeset
   127
    "force creation of a new debugger"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   128
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   129
    CachedDebugger := nil.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   130
    CachedExclusive := nil
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   131
571fd5eee315 Initial revision
claus
parents:
diff changeset
   132
    "DebugView newDebugger"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   133
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   134
571fd5eee315 Initial revision
claus
parents:
diff changeset
   135
enterWithMessage:aString
571fd5eee315 Initial revision
claus
parents:
diff changeset
   136
    "the standard way of entering the debugger - sent from Objects
571fd5eee315 Initial revision
claus
parents:
diff changeset
   137
     error- and halt messages"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   138
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   139
    thisContext isRecursive ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   140
        ^ MiniDebugger enterWithMessage:aString
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   141
    ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   142
    ^ self enter:(thisContext sender) withMessage:aString
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   143
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   144
    "Debugger enterWithMessage:'hi there'"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   145
!
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   146
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   147
enter
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   148
    "another way of entering the debugger"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   149
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   150
    ^ self enter:(thisContext sender) withMessage:'Debugger'
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   151
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   152
    "Debugger enter"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   153
!
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   154
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   155
enter:aContext
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   156
    "enter the debugger on aContext"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   157
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   158
    ^ self enter:aContext withMessage:'Debugger'
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   159
!
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   160
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   161
enter:aContext withMessage:aString
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   162
    "the standard way of entering the debugger - sent from Objects
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   163
     error- and halt messages"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   164
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   165
    |aDebugger|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   166
14
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   167
    thisContext isRecursive ifTrue:[
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   168
        ^ MiniDebugger enterWithMessage:'recursive error'.
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   169
    ].
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   170
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   171
    StepInterruptPending := nil.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   172
    aDebugger := self new.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   173
    aDebugger label:aString , ' (' , Processor activeProcess nameOrId , ')'.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   174
    aDebugger enter:aContext.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   175
    ^ nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   176
571fd5eee315 Initial revision
claus
parents:
diff changeset
   177
    "nil halt"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   178
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   179
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   180
openOn:aProcess
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   181
    "start a  debugger on aProcess
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   182
     (actually not more than a good-looking inspector)"
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   183
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   184
    |aDebugger label|
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   185
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   186
    aDebugger := super new.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   187
    aDebugger icon:(Form fromFile:'Debugger.xbm' resolution:100).
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   188
    aProcess notNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   189
        label := 'inspecting Debugger (' , aProcess nameOrId , ')'.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   190
    ] ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   191
        label := 'no process'
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   192
    ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   193
    aDebugger label:label.
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   194
    aDebugger iconLabel:'Debugger'.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   195
    aDebugger openOn:aProcess.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   196
    ^ nil
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   197
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   198
571fd5eee315 Initial revision
claus
parents:
diff changeset
   199
!DebugView methodsFor:'initialization'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   200
571fd5eee315 Initial revision
claus
parents:
diff changeset
   201
initialize
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   202
    |v panel hpanel bpanel|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   203
571fd5eee315 Initial revision
claus
parents:
diff changeset
   204
    super initialize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   205
571fd5eee315 Initial revision
claus
parents:
diff changeset
   206
    font := font on:device.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   207
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   208
    busy := false.
14
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   209
    exclusive := false.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   210
    inspecting := false.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   211
    exitAction := nil.
10
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   212
    bigStep := false.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   213
    canContinue := false.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   214
    canAbort := false.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   215
571fd5eee315 Initial revision
claus
parents:
diff changeset
   216
    bpanel := HorizontalPanelView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   217
                        origin:(0.0 @ 0.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   218
                        extent:(1.0 @ (font height * 2))
571fd5eee315 Initial revision
claus
parents:
diff changeset
   219
                            in:self.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   220
    bpanel layout:#left.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   221
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   222
    terminateButton := Button
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   223
                        label:(resources at:'terminate')
20
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
   224
                        action:[terminateButton turnOffWithoutRedraw. self doTerminate]
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   225
                        in:bpanel.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   226
    abortButton := Button
2
claus
parents: 0
diff changeset
   227
                        label:(resources at:'abort')
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   228
                        action:[abortButton turnOffWithoutRedraw. self doAbort]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   229
                        in:bpanel.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   230
    returnButton := Button
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   231
                        label:(resources at:'return')
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   232
                        action:[returnButton turnOff. self doReturn]
20
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
   233
                        in:bpanel.
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
   234
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
   235
    restartButton := Button
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
   236
                        label:(resources at:'restart')
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
   237
                        action:[restartButton turnOff. self doRestart]
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
   238
                        in:bpanel.
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
   239
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   240
    continueButton := Button
2
claus
parents: 0
diff changeset
   241
                        label:(resources at:'continue')
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   242
                        action:[continueButton turnOffWithoutRedraw. self doContinue]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   243
                        in:bpanel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   244
    stepButton := Button
2
claus
parents: 0
diff changeset
   245
                        label:(resources at:'step')
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   246
                        action:[stepButton turnOff. self doStep]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   247
                        in:bpanel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   248
    sendButton := Button
2
claus
parents: 0
diff changeset
   249
                        label:(resources at:'send')
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   250
                        action:[sendButton turnOff. self doSend]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   251
                        in:bpanel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   252
571fd5eee315 Initial revision
claus
parents:
diff changeset
   253
    panel := VariableVerticalPanel
571fd5eee315 Initial revision
claus
parents:
diff changeset
   254
                        origin:(0.0 @ bpanel height)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   255
                        corner:(1.0 @ 1.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   256
                            in:self.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   257
571fd5eee315 Initial revision
claus
parents:
diff changeset
   258
    v := ScrollableView for:SelectionInListView in:panel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   259
    v origin:(0.0 @ 0.0) corner:(1.0 @ 0.25).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   260
571fd5eee315 Initial revision
claus
parents:
diff changeset
   261
    contextView := v scrolledView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   262
    contextView action:[:lineNr | self showSelection:lineNr].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   263
571fd5eee315 Initial revision
claus
parents:
diff changeset
   264
    v := ScrollableView for:CodeView in:panel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   265
    v origin:(0.0 @ 0.25) corner:(1.0 @ 0.75).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   266
571fd5eee315 Initial revision
claus
parents:
diff changeset
   267
    codeView := v scrolledView.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   268
571fd5eee315 Initial revision
claus
parents:
diff changeset
   269
    hpanel := VariableHorizontalPanel in:panel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   270
    hpanel origin:(0.0 @ 0.75) corner:(1.0 @ 1.0).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   271
571fd5eee315 Initial revision
claus
parents:
diff changeset
   272
    receiverInspector := InspectorView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   273
                                origin:(0.0 @ 0.0) corner:(0.5 @ 1.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   274
                                    in:hpanel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   275
571fd5eee315 Initial revision
claus
parents:
diff changeset
   276
    contextInspector := ContextInspectorView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   277
                                origin:(0.5 @ 0.0) corner:(1.0 @ 1.0)
571fd5eee315 Initial revision
claus
parents:
diff changeset
   278
                                    in:hpanel
571fd5eee315 Initial revision
claus
parents:
diff changeset
   279
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   280
571fd5eee315 Initial revision
claus
parents:
diff changeset
   281
initializeMiddleButtonMenu
571fd5eee315 Initial revision
claus
parents:
diff changeset
   282
    |labels|
571fd5eee315 Initial revision
claus
parents:
diff changeset
   283
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   284
    labels := resources array:#(
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   285
                                'show more'
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   286
                                '-'
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   287
"
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   288
                                'continue'
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   289
                                'terminate'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   290
                                'abort'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   291
                                '-'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   292
                                'step'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   293
                                'send'
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   294
                                '-'
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   295
                                'return'
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   296
                                'restart'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   297
                                '-'
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   298
"
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   299
                                'remove breakpoint'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   300
                                '-'
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   301
                                'implementors ...'
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   302
                                'senders ...'
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   303
                                '-'
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   304
                                'inspect context'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   305
                                '-'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   306
                                'exit smalltalk'
571fd5eee315 Initial revision
claus
parents:
diff changeset
   307
                              ).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   308
571fd5eee315 Initial revision
claus
parents:
diff changeset
   309
    contextView
571fd5eee315 Initial revision
claus
parents:
diff changeset
   310
        middleButtonMenu:(PopUpMenu 
571fd5eee315 Initial revision
claus
parents:
diff changeset
   311
                                labels:labels
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   312
                             selectors:#(
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   313
                                         doShowMore
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   314
                                         nil
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   315
"
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   316
                                         doContinue
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   317
                                         doTerminate
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   318
                                         doAbort
571fd5eee315 Initial revision
claus
parents:
diff changeset
   319
                                         nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   320
                                         doStep
571fd5eee315 Initial revision
claus
parents:
diff changeset
   321
                                         doSend
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   322
                                         nil
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   323
                                         doReturn
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   324
                                         doRestart
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   325
                                         nil
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   326
"
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   327
                                         doRemoveBreakpoint
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   328
                                         nil
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   329
                                         doImplementors
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   330
                                         doSenders
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   331
                                         nil
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   332
                                         doInspectContext
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   333
                                         nil
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   334
                                         doExit
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   335
                                        )
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   336
                                  receiver:self
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   337
                                       for:contextView).
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   338
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   339
571fd5eee315 Initial revision
claus
parents:
diff changeset
   340
addToCurrentProject
571fd5eee315 Initial revision
claus
parents:
diff changeset
   341
    "ignored here"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   342
571fd5eee315 Initial revision
claus
parents:
diff changeset
   343
    ^ self
571fd5eee315 Initial revision
claus
parents:
diff changeset
   344
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   345
571fd5eee315 Initial revision
claus
parents:
diff changeset
   346
createOnTop
571fd5eee315 Initial revision
claus
parents:
diff changeset
   347
    ^ false "true"
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   348
!
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   349
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   350
realize
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   351
    super realize.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   352
    exclusive ifTrue:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   353
        windowGroup := nil
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   354
    ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   355
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   356
571fd5eee315 Initial revision
claus
parents:
diff changeset
   357
!DebugView methodsFor:'interrupt handling'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   358
571fd5eee315 Initial revision
claus
parents:
diff changeset
   359
stepInterrupt
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   360
    |where here s isWrap method lastWrappedConAddr wrappedMethod|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   361
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   362
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   363
     kludge, check if we are in a wrapper methods hidden setup-sequence
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   364
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   365
    here := thisContext.        "stepInterrupt"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   366
    here := here sender.        "the interrupted context"  
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   367
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   368
"/ 'here in ' print.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   369
"/  ((ObjectMemory addressOf:here) printStringRadix:16)print. '' printNL.
10
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   370
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   371
    where := here.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   372
    isWrap := false.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   373
    wrappedMethod := nil.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   374
    5 timesRepeat:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   375
"/ where selector printNL.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   376
        method := where method.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   377
        (method notNil and:[method isWrapped]) ifTrue:[
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   378
            "
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   379
             in a wrapper method
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   380
            "
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   381
            wrappedMethod ~~ method ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   382
                wrappedMethod := method.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   383
                lastWrappedConAddr := ObjectMemory addressOf:where.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   384
                where sender receiver == method originalMethod ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   385
                    isWrap := true.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   386
                ]
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   387
            ] ifFalse:[
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   388
                (ObjectMemory addressOf:where) == steppedContextAddress ifTrue:[
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   389
"/ 'change stepCon from: ' print.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   390
"/  (steppedContextAddress printStringRadix:16)print.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   391
"/ ' to: ' print.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   392
"/  (lastWrappedConAddr printStringRadix:16)printNL.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   393
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   394
                    steppedContextAddress := lastWrappedConAddr
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   395
                ]
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   396
            ]
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   397
        ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   398
        where := where sender
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   399
    ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   400
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   401
    isWrap ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   402
"/ 'ignore wrap' printNL.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   403
        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   404
          ignore, while in wrappers hidden setup
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   405
        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   406
        where := nil. here := nil.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   407
        ObjectMemory flushInlineCaches.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   408
        StepInterruptPending := true.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   409
        InterruptPending := true.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   410
        InStepInterrupt := nil.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   411
        ^ nil
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   412
    ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   413
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   414
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   415
     is this for a send or a step ?
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   416
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   417
    bigStep ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   418
        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   419
         a step - ignore all contexts below the interresting one
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   420
        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   421
        where := here.      "the interrupted context"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   422
        (ObjectMemory addressOf:where) == steppedContextAddress ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   423
            where := where sender.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   424
"/ 'look for ' print.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   425
"/  (steppedContextAddress printStringRadix:16)print. '' printNL.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   426
            (ObjectMemory addressOf:where) == steppedContextAddress ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   427
                "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   428
                 check if we are in a context below steppedContext
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   429
                 (i.e. if steppedContext can be reached from
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   430
                  interrupted context. Not using context-ref but its
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   431
                  address to avoid creation of many useless contexts.)
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   432
                "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   433
                [where notNil] whileTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   434
"/  ((ObjectMemory addressOf:where) printStringRadix:16)print. ' ' print.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   435
"/  where selector printNL.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   436
                    (ObjectMemory addressOf:where) == steppedContextAddress ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   437
"/ 'found it - below' printNL.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   438
                        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   439
                         found the interresting context somwehere up in the
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   440
                         chain. We seem to be still below the interresting one ...
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   441
                        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   442
                        tracing == true ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   443
                            here printString printNewline
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   444
                        ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   445
                        where := nil. here := nil.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   446
                        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   447
                          yes, a context below
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   448
                          - continue and schedule another stepInterrupt.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   449
                          Must flush caches since optimized methods not always
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   450
                          look for pending interrupts
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   451
                        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   452
                        ObjectMemory flushInlineCaches.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   453
                        StepInterruptPending := true.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   454
                        InterruptPending := true.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   455
                        InStepInterrupt := nil.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   456
                        ^ nil
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   457
                    ].
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   458
                    where := where sender
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   459
                ].
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   460
                s := 'left stepped method'
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   461
            ] ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   462
"/ 'found it right in sender' printNL.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   463
                s := 'after step'
14
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   464
            ].
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   465
        ] ifTrue:[
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   466
"/ 'found it right away' printNL.
14
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   467
            s := 'after step'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   468
        ].
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   469
        tracing := false.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   470
        bigStep := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   471
    ] ifFalse:[
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   472
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   473
        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   474
         a send
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   475
        "
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   476
        steppedContextAddress := nil.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   477
        s := 'after send'
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   478
    ].
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   479
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   480
    name := Processor activeProcess nameOrId.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   481
    self label:(s , ' (process: ' , name , ')').
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   482
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   483
    "release refs to context"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   484
    where := nil. here := nil.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   485
    self enter:thisContext sender 
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   486
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   487
571fd5eee315 Initial revision
claus
parents:
diff changeset
   488
!DebugView methodsFor:'basic'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   489
571fd5eee315 Initial revision
claus
parents:
diff changeset
   490
enter
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   491
    "enter the debugger - on the sending context"
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   492
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   493
    |where|
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   494
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   495
    busy := true.
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   496
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   497
    where := thisContext.      "enter"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   498
    where := where sender.     "the calling context"
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   499
    where notNil ifTrue:[
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   500
        (where receiver == DebugView) ifTrue:[
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   501
            where := where sender
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   502
        ]
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   503
        "where is now interrupted methods context"
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   504
    ].
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   505
    ^ self enter:where
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   506
!
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   507
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   508
enter:aContext
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   509
    "enter the debugger - get and display the context, then start an
571fd5eee315 Initial revision
claus
parents:
diff changeset
   510
     exclusive event loop on top of eveything else"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   511
35
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   512
    |con selection|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   513
14
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   514
    busy := true.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   515
    inspecting := false.
10
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   516
    bigStep := false.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   517
    nChainShown := 50.
10
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   518
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   519
    "if debugger is entered while a box has grabbed the
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   520
     pointer, we must ungrab - otherwise X wont talk to
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   521
     us here
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   522
    "
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   523
    ActiveGrab notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   524
        grabber := ActiveGrab.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   525
        ActiveGrab device ungrabPointer.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   526
        ActiveGrab device synchronizeOutput.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   527
        ActiveGrab := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   528
    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   529
        grabber := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
   530
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   531
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   532
    drawableId notNil ifTrue:[
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   533
        "not the first time - realize at old position"
35
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   534
        terminateButton turnOffWithoutRedraw.
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   535
        continueButton turnOffWithoutRedraw.
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   536
        abortButton turnOffWithoutRedraw.
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   537
        stepButton turnOffWithoutRedraw.
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   538
        sendButton turnOffWithoutRedraw.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   539
        self rerealize
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   540
    ] ifFalse:[
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   541
        exclusive ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   542
            windowGroup isNil ifTrue:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   543
                windowGroup := WindowGroup new.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   544
                windowGroup addTopView:self.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   545
            ].
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   546
        ].
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   547
        self realize.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   548
        self iconLabel:'Debugger'.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   549
    ].
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   550
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   551
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   552
     bring us to the top
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   553
    "
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   554
    self raise.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   555
    Display synchronizeOutput.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   556
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   557
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   558
     get the walkback list
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   559
    "
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   560
    self setContext:aContext.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   561
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   562
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   563
     and find one to show
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   564
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   565
    steppedContextAddress isNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   566
        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   567
         preselect a more interresting context, (where halt/raise was ...)
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   568
        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   569
        selection := self interrestingContextFrom:aContext.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   570
    ] ifFalse:[
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   571
        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   572
         if we came here by a big-step, show the method where we are
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   573
        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   574
        steppedContextAddress notNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   575
            (ObjectMemory addressOf:aContext) == steppedContextAddress ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   576
                selection := 1
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   577
            ] ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   578
                (ObjectMemory addressOf:aContext sender) == steppedContextAddress ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   579
                    selection := 2
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   580
                ]
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   581
            ]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   582
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   583
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   584
571fd5eee315 Initial revision
claus
parents:
diff changeset
   585
    selection notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   586
        self showSelection:selection.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   587
        contextView selection:selection
571fd5eee315 Initial revision
claus
parents:
diff changeset
   588
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   589
35
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   590
    canAbort := Object abortSignal isHandled.
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   591
    canAbort ifTrue:[
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   592
        abortButton enable.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   593
        contextView middleButtonMenu enable:#doAbort.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   594
    ] ifFalse:[
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   595
        abortButton disable.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   596
        contextView middleButtonMenu disable:#doAbort.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   597
    ].
14
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   598
    exclusive ifTrue:[
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   599
        terminateButton disable.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   600
        contextView middleButtonMenu disable:#doTerminate.
14
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   601
    ] ifFalse:[
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   602
        terminateButton enable.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   603
        contextView middleButtonMenu enable:#doTerminate.
14
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   604
    ].
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   605
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   606
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   607
     enter private event handling loop
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   608
    "
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   609
    canContinue := true.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   610
    self controlLoop.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   611
571fd5eee315 Initial revision
claus
parents:
diff changeset
   612
    contextArray := nil.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   613
    receiverInspector release.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   614
    contextInspector release.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   615
571fd5eee315 Initial revision
claus
parents:
diff changeset
   616
    (exitAction == #step) ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   617
        self unrealize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   618
        device synchronizeOutput.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   619
        (exitAction == #abort) ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   620
            selectedContext := nil.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   621
            InInterrupt := nil.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   622
            busy := false.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   623
            exclusive ifTrue:[CachedExclusive := self] ifFalse:[CachedDebugger := self].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   624
            Object abortSignal raise.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   625
            'abort failed' errorPrintNewline
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   626
        ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   627
        (exitAction == #return) ifTrue:[
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   628
            selectedContext notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   629
                con := selectedContext.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   630
                selectedContext := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   631
                InInterrupt := nil.
20
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
   632
                busy := false.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   633
                exclusive ifTrue:[CachedExclusive := self] ifFalse:[CachedDebugger := self].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   634
                con unwind.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   635
                'cannot return selected context' errorPrintNewline
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   636
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   637
        ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   638
            (exitAction == #restart) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   639
                selectedContext notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   640
                    con := selectedContext.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   641
                    selectedContext := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   642
                    InInterrupt := nil.
20
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
   643
                    busy := false.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   644
                    exclusive ifTrue:[CachedExclusive := self] ifFalse:[CachedDebugger := self].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   645
                    con restart.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   646
                    'cannot restart selected context' errorPrintNewline
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   647
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   648
            ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   649
                (exitAction == #terminate) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   650
                    selectedContext := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   651
                    InInterrupt := nil.
20
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
   652
                    busy := false.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   653
                    exclusive ifTrue:[CachedExclusive := self] ifFalse:[CachedDebugger := self].
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   654
                    Processor activeProcess terminate.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   655
                    'cannot terminate process' errorPrintNewline
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   656
                ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   657
            ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   658
        ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   659
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   660
571fd5eee315 Initial revision
claus
parents:
diff changeset
   661
    selectedContext := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   662
571fd5eee315 Initial revision
claus
parents:
diff changeset
   663
    grabber notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   664
        grabber device grabPointerIn:(grabber id).
571fd5eee315 Initial revision
claus
parents:
diff changeset
   665
        ActiveGrab := grabber
571fd5eee315 Initial revision
claus
parents:
diff changeset
   666
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   667
571fd5eee315 Initial revision
claus
parents:
diff changeset
   668
    (exitAction == #step) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   669
        "scedule another stepInterrupt
571fd5eee315 Initial revision
claus
parents:
diff changeset
   670
         - must flush caches since optimized methods not always
571fd5eee315 Initial revision
claus
parents:
diff changeset
   671
         look for pending interrupts"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   672
        ObjectMemory flushInlineCaches.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   673
2
claus
parents: 0
diff changeset
   674
        ObjectMemory stepInterruptHandler:self.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   675
        StepInterruptPending := true.
10
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   676
        InterruptPending := true.
46e0d4f2079f *** empty log message ***
claus
parents: 7
diff changeset
   677
        InStepInterrupt := nil
20
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
   678
    ] ifFalse:[
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   679
        busy := false.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   680
        exclusive ifTrue:[CachedExclusive := self] ifFalse:[CachedDebugger := self]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   681
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
   682
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   683
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   684
openOn:aProcess
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   685
    "enter the debugger on a process - 
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   686
     in this case, we are just inspecting the context chain of the process,
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   687
     not offering continue/abort/step and send functions.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   688
     Also, we do not run on top of the debugger process, but as a separate
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
   689
     one. (think of it as an inspector showing more detail)"
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   690
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   691
    busy := true.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   692
    bigStep := false.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   693
    inspecting := true.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   694
    nChainShown := 50.
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   695
20
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
   696
    "can only look into process - context chain is not active"
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   697
    canContinue := true.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   698
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   699
    abortButton disable.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   700
    sendButton disable.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   701
    stepButton disable.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   702
    continueButton disable.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   703
    returnButton disable.
20
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
   704
    restartButton disable.
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   705
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   706
    self initializeMiddleButtonMenu.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   707
    contextView middleButtonMenu disable:#doAbort.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   708
    contextView middleButtonMenu disable:#doSend.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   709
    contextView middleButtonMenu disable:#doStep.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   710
    contextView middleButtonMenu disable:#doContinue.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   711
    contextView middleButtonMenu disable:#doReturn.
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   712
    contextView middleButtonMenu disable:#doRestart.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   713
    contextView middleButtonMenu disable:#doTraceStep.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   714
    contextView middleButtonMenu disable:#doTerminate.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   715
    contextView middleButtonMenu disable:#doRemoveBreakpoint.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   716
    contextView middleButtonMenu disable:#doImplementors.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   717
    contextView middleButtonMenu disable:#doSenders.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   718
    contextView middleButtonMenu disable:#doInspectContext.
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   719
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   720
    aProcess isNil ifTrue:[
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   721
        terminateButton disable.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   722
    ] ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   723
        aProcess suspendedContext isNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   724
            terminateButton disable.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   725
            contextView middleButtonMenu disable:#doTerminate.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   726
        ].
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   727
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   728
        self setContext:aProcess suspendedContext.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   729
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   730
        catchBlock := [
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   731
            contextArray := nil.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   732
            selectedContext := nil.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   733
            (exitAction == #terminate) ifTrue:[
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   734
            aProcess terminate.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   735
            ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   736
            super destroy
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   737
        ].
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   738
    ].
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   739
    self open
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   740
! !
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   741
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   742
!DebugView methodsFor:'private control loop'!
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   743
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   744
controlLoop
571fd5eee315 Initial revision
claus
parents:
diff changeset
   745
    "this is a kludge:
571fd5eee315 Initial revision
claus
parents:
diff changeset
   746
        start a dispatchloop which exits when
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   747
        either continue, return or step is pressed
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   748
    "
571fd5eee315 Initial revision
claus
parents:
diff changeset
   749
571fd5eee315 Initial revision
claus
parents:
diff changeset
   750
    haveControl := true.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   751
    [haveControl] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   752
        self controlLoopCatchingErrors
571fd5eee315 Initial revision
claus
parents:
diff changeset
   753
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   754
    catchBlock := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   755
571fd5eee315 Initial revision
claus
parents:
diff changeset
   756
    codeView contents:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   757
    codeView acceptAction:nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   758
    contextView contents:nil.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   759
    receiverInspector release.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   760
    contextInspector release
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   761
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   762
571fd5eee315 Initial revision
claus
parents:
diff changeset
   763
controlLoopCatchingErrors
571fd5eee315 Initial revision
claus
parents:
diff changeset
   764
    "setup a catch-block"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   765
    catchBlock := [^ nil].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   766
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   767
    exclusive ifTrue:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   768
        "if we do not have multiple processes or its a system process
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   769
         we start another dispatch loop, which exits when
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   770
         either continue, return or step is pressed
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   771
         or (via the catchBlock) if an error occurs.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   772
         Since our display is an extra exclusive one (ModalDisplay)
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   773
         all processing for normal views stops here ...
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   774
        "
14
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   775
        device dispatchModalWhile:[haveControl]
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   776
    ] ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   777
        "we do have multiple processes -
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   778
         simply enter the DebugViews-Windowgroup event loop.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   779
         effectively suspending event processing for the currently 
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   780
         active group.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   781
        "
14
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   782
        SignalSet anySignal handle:[:ex |
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   783
            'error within debugger ignored' errorPrintNewline.
14
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   784
            ex return.
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   785
        ] do:[
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   786
            windowGroup eventLoopWhile:[true]
14
e07eee5d93ca *** empty log message ***
claus
parents: 13
diff changeset
   787
        ]
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
   788
    ]
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   789
! !
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   790
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   791
!DebugView methodsFor:'private'!
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   792
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   793
busy
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   794
    ^ busy
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   795
!
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   796
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   797
exclusive:aBoolean
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   798
    exclusive := aBoolean
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   799
!
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   800
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   801
interrestingContextFrom:aContext
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   802
    "return an interresting contexts offset, or nil.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   803
     Just to add a bit of comfort :-)"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   804
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   805
    |c found offset sel|
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   806
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   807
    "somewhere, at the bottom, there must be a raise ..."
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   808
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   809
    c := aContext.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   810
    1 to:5 do:[:i |
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   811
        c isNil ifTrue:[^ 1 "^ nil"].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   812
        sel := c selector.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   813
        ((sel == #raise) 
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   814
        or:[(sel == #raiseRequestWith:)
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   815
        or:[(sel == #raiseRequestWith:errorString:)]]) 
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   816
        ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   817
            offset := i.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   818
            found := c
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   819
        ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   820
        c := c sender.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   821
    ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   822
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   823
    (c := found) isNil ifTrue:[^ 1 "nil"].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   824
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   825
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   826
     got it; move up, for the one that called the raise
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   827
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   828
    (c := c sender) isNil ifTrue:[^ offset].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   829
    offset := offset + 1.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   830
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   831
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   832
     now, we are one above the raise
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   833
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   834
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   835
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   836
     if raise implementation reuses raise code ...
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   837
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   838
    [ 
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   839
        #( raise raiseRequestWith: #raiseRequestWith:errorString: ) 
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   840
        includes:c selector 
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   841
    ] whileTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   842
        (c := c sender) isNil ifTrue:[^ offset].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   843
        offset := offset + 1.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   844
    ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   845
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   846
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   847
     if the sender of the raise is one of objects error methods ...
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   848
    "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   849
    ( #( halt halt: 
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   850
         error error: 
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   851
         doesNotUnderstand: 
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   852
         subclassResponsibility 
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   853
         primitiveFailed) includes:c selector) 
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   854
    ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   855
        c selector == #doesNotUnderstand: ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   856
            "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   857
             one more up, to get to the originating context
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   858
            "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   859
            (c := c sender) isNil ifTrue:[^ offset].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   860
            offset := offset + 1.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   861
        ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   862
        (c := c sender) isNil ifTrue:[^ offset].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   863
        offset := offset + 1.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   864
    ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   865
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   866
    ^ offset
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   867
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   868
571fd5eee315 Initial revision
claus
parents:
diff changeset
   869
setContext:aContext
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   870
    "show calling chain from aContext in the walk-back listview"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   871
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   872
    |con text method caller caller2|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   873
571fd5eee315 Initial revision
claus
parents:
diff changeset
   874
    aContext isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   875
        text := Array with:'** no context **'.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   876
        contextArray := nil.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   877
        contextView middleButtonMenu disable:#doShowMore.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   878
    ] ifFalse:[
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   879
        text := OrderedCollection new:nChainShown.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   880
        contextArray := OrderedCollection new:nChainShown.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   881
        con := aContext.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   882
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   883
        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   884
         get them all
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   885
        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   886
        [con notNil and:[contextArray size <= nChainShown]] whileTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   887
            contextArray add:con.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   888
            text add:(con printString).
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   889
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   890
            method := con method.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   891
            (method notNil and:[method isWrapped]) ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   892
                "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   893
                 kludge: if its a wrapped method, then hide the wrap-call
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   894
                "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   895
                caller := con sender.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   896
                (caller notNil and:[caller receiver == method originalMethod]) ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   897
                    caller2 := caller sender.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   898
                    (caller2 notNil and:[caller2 method == method]) ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   899
                        con := caller2
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   900
                    ]
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   901
                ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   902
                caller := caller2 := nil
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   903
            ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   904
            con := con sender
571fd5eee315 Initial revision
claus
parents:
diff changeset
   905
        ].
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   906
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   907
        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   908
         did we reach the end ?
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   909
        "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   910
        con isNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   911
            contextView middleButtonMenu disable:#doShowMore.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   912
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   913
            "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   914
             the very last one is the startup context
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   915
             (in main) - it has nil as receiver and nil as selector
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   916
            "
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   917
            contextArray last selector isNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   918
                contextArray removeLast.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   919
                text removeLast
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   920
            ]
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   921
        ] ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   922
            contextView middleButtonMenu enable:#doShowMore.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   923
        ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   924
    ].
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   925
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   926
    contextView setList: "list:" text.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   927
    receiverInspector release.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   928
    contextInspector release.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   929
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   930
    contextView middleButtonMenu disable:#doRemoveBreakpoint.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   931
    contextView middleButtonMenu disable:#doImplementors.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   932
    contextView middleButtonMenu disable:#doSenders.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   933
! !
571fd5eee315 Initial revision
claus
parents:
diff changeset
   934
571fd5eee315 Initial revision
claus
parents:
diff changeset
   935
!DebugView methodsFor:'user interaction'!
571fd5eee315 Initial revision
claus
parents:
diff changeset
   936
571fd5eee315 Initial revision
claus
parents:
diff changeset
   937
showSelection:lineNr
571fd5eee315 Initial revision
claus
parents:
diff changeset
   938
    "user clicked on a header line - show selected code in textView"
571fd5eee315 Initial revision
claus
parents:
diff changeset
   939
571fd5eee315 Initial revision
claus
parents:
diff changeset
   940
    |con homeContext sel method code
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
   941
     implementorClass lineNrInMethod rec|
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   942
571fd5eee315 Initial revision
claus
parents:
diff changeset
   943
    contextArray notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   944
        con := contextArray at:lineNr.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   945
        lineNrInMethod := con lineNumber.
571fd5eee315 Initial revision
claus
parents:
diff changeset
   946
        con isBlockContext ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   947
            homeContext := con methodHome
571fd5eee315 Initial revision
claus
parents:
diff changeset
   948
        ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
   949
            homeContext := con
571fd5eee315 Initial revision
claus
parents:
diff changeset
   950
        ].
35
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   951
        contextInspector inspect:con.
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   952
        homeContext notNil ifTrue:[
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   953
            sel := homeContext selector.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   954
            sel notNil ifTrue:[
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   955
                implementorClass := homeContext searchClass whichClassImplements:sel.
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   956
                implementorClass isNil ifTrue:[
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   957
                    codeView contents:'** no method - no source **'
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   958
                ] ifFalse:[
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   959
                    method := implementorClass compiledMethodAt:sel.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   960
                    code := method source.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   961
                    code isNil ifTrue:[
35
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   962
                        method sourceFileName notNil ifTrue:[
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   963
                            codeView contents:('** no sourcefile: ' ,
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   964
                                               method sourceFileName ,
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   965
                                               ' **')
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   966
                        ] ifFalse:[
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   967
                            codeView contents:'** no source **'
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
   968
                        ]
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   969
                    ]
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   970
                ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   971
                code isNil ifTrue:[
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   972
                    codeView acceptAction:nil.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   973
                ] ifFalse:[
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   974
                    codeView contents:code.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   975
                    (lineNrInMethod notNil and:[lineNrInMethod ~~ 0]) ifTrue:[
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   976
                        lineNrInMethod > codeView list size ifTrue:[
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   977
                            lineNrInMethod := codeView list size + 1
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   978
                        ].
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   979
                        codeView selectLine:lineNrInMethod.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   980
                        codeView makeSelectionVisible
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   981
                    ].
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   982
                    codeView acceptAction:[:code | self codeAccept:code asString]
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   983
                ].
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   984
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   985
                "fetch rec here - so we wont need con in doItAction"
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   986
                rec := homeContext receiver.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   987
                receiverInspector inspect:rec.
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
   988
                codeView doItAction:[:theCode |
37
50f59bad66b1 *** empty log message ***
claus
parents: 35
diff changeset
   989
                                 rec class compiler 
50f59bad66b1 *** empty log message ***
claus
parents: 35
diff changeset
   990
                                     evaluate:theCode 
50f59bad66b1 *** empty log message ***
claus
parents: 35
diff changeset
   991
                                     in:nil 
50f59bad66b1 *** empty log message ***
claus
parents: 35
diff changeset
   992
                                     receiver:rec 
50f59bad66b1 *** empty log message ***
claus
parents: 35
diff changeset
   993
                                     notifying:codeView 
50f59bad66b1 *** empty log message ***
claus
parents: 35
diff changeset
   994
                                     logged:true 
50f59bad66b1 *** empty log message ***
claus
parents: 35
diff changeset
   995
                                     ifFail:nil 
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   996
                ]
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
   997
            ]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
   998
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
   999
        selectedContext := homeContext
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1000
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1001
    "clear out locals to prevent keeping around unneeded contexts (due to the
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1002
     block held in codeView).
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1003
     (not really needed, since stuff gets collected away sooner or later ..."
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1004
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1005
    con := nil.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1006
    homeContext := nil.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1007
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1008
    contextView middleButtonMenu enable:#doImplementors.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1009
    contextView middleButtonMenu enable:#doSenders.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1010
    contextView middleButtonMenu enable:#doInspectContext.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1011
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1012
    (method notNil and:[method isWrapped]) ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1013
        contextView middleButtonMenu enable:#doRemoveBreakpoint.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1014
    ] ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1015
        contextView middleButtonMenu disable:#doRemoveBreakpoint.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1016
    ]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1017
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1018
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1019
codeAccept:someCode
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1020
    "user wants some code to be recompiled - must unwind stack since everything above
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1021
     and including selected method cannot be continued"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1022
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1023
    "walk up context chain and find highest context which is either the selected context,
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1024
     or - if its a block-context - whose home is the selected context"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1025
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1026
    |con top sel implementorClass method newMethod|
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1027
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1028
    codeView cursor:Cursor execute.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1029
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1030
    con := selectedContext.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1031
    top := con.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1032
    [con notNil] whileTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1033
        (con methodHome == selectedContext) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1034
            top := con
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1035
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1036
        con := con sender
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1037
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1038
    "now, remove everything up to and including top from context chain"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1039
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1040
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1041
    self setContext:(top sender).
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1042
"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1043
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1044
    sel := selectedContext selector.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1045
    implementorClass := selectedContext searchClass whichClassImplements:sel.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1046
    method := implementorClass compiledMethodAt:sel.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1047
    newMethod := implementorClass compiler compile:someCode
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1048
                                          forClass:implementorClass
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1049
                                        inCategory:(method category)
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1050
                                         notifying:codeView.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1051
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1052
    "if it worked, remove everything up to and including top
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1053
     from context chain"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1054
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1055
    (newMethod notNil and:[newMethod ~~ #Error]) ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1056
        self setContext:(top sender).
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1057
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1058
        "continue/step is no longer possible"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1059
        canContinue := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1060
        self showSelection:1.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1061
        exitAction := #return
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1062
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1063
    codeView cursor:Cursor normal
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1064
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1065
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1066
destroy
35
cd5cb075fd6a *** empty log message ***
claus
parents: 29
diff changeset
  1067
    "closing the debugger implies an abort or continue"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1068
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1069
    contextView middleButtonMenu hide.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1070
    receiverInspector release.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1071
    contextInspector release.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1072
    inspecting ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1073
        canAbort ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1074
            self doAbort.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1075
            'oops, abort failed' errorPrintNewline.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1076
        ] ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1077
            self doContinue
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1078
        ]
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1079
    ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1080
    super destroy
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1081
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1082
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1083
doExit
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1084
    "exit from menu: immediate exit from smalltalk"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1085
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1086
    Smalltalk exit
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1087
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1088
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1089
doRemoveBreakpoint
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1090
    "remove breakpoint on the selected contexts method - if any"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1091
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1092
    |implementorClass method|
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1093
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1094
    implementorClass := selectedContext searchClass 
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1095
                            whichClassImplements:selectedContext selector.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1096
    implementorClass notNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1097
        method := implementorClass compiledMethodAt:selectedContext selector.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1098
        (method notNil and:[method isWrapped]) ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1099
            MessageTracer unwrapMethod:method
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1100
        ]
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1101
    ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1102
    contextView middleButtonMenu disable:#doRemoveBreakpoint.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1103
!
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1104
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1105
doSenders
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1106
    "open a browser on the senders"
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
  1107
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1108
    selectedContext notNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1109
        SystemBrowser browseAllCallsOn:selectedContext selector.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1110
    ]
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1111
!
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1112
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1113
doImplementors
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1114
    "open a browser on the implementors"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1115
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1116
    selectedContext notNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1117
        SystemBrowser browseImplementorsOf:selectedContext selector.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1118
    ]
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1119
!
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1120
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1121
doShowMore
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1122
    "double number of contexts shown"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1123
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1124
    |oldSelection|
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1125
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1126
    contextArray notNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1127
        oldSelection := contextView selection.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1128
        nChainShown := nChainShown * 2.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1129
        self setContext:contextArray first.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1130
        contextView selection:oldSelection.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1131
    ]
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1132
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1133
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1134
doSend
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1135
    "send from menu"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1136
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1137
    inspecting ifTrue:[^ self].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1138
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1139
    canContinue ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1140
        steppedContextAddress := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1141
        haveControl := false.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1142
        exitAction := #step.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1143
        ProcessorScheduler isPureEventDriven ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1144
            "exit private event-loop"
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1145
            catchBlock notNil ifTrue:[catchBlock value].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1146
            'oops, send failed' errorPrintNewline.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1147
            self warn:'send failed'.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1148
            sendButton turnOff; disable.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1149
        ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1150
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1151
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1152
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1153
doStep
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1154
    "step from menu"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1155
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1156
    inspecting ifTrue:[^ self].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1157
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1158
    canContinue ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1159
        selectedContext notNil ifTrue:[
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1160
            steppedContextAddress := ObjectMemory addressOf:selectedContext
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1161
        ] ifFalse:[
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1162
            steppedContextAddress := ObjectMemory addressOf:(contextArray at:2)
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1163
        ].
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
  1164
        bigStep := true.
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1165
        haveControl := false.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1166
        exitAction := #step.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1167
        ProcessorScheduler isPureEventDriven ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1168
            "exit private event-loop"
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1169
            catchBlock notNil ifTrue:[catchBlock value].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1170
            'oops, step failed' errorPrintNewline.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1171
            self warn:'step failed'.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1172
            stepButton turnOff; disable.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1173
        ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1174
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1175
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1176
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1177
doTraceStep
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
  1178
    "tracestep - not implemented yet"
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1179
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1180
    canContinue ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1181
        tracing := true.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1182
        self doStep
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1183
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1184
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1185
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1186
doAbort
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1187
    "abort from menu"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1188
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1189
    inspecting ifTrue:[^ self].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1190
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1191
    steppedContextAddress := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1192
    haveControl := false.
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1193
    exitAction := #abort.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1194
    ProcessorScheduler isPureEventDriven ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1195
        "exit private event-loop"
20
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
  1196
        catchBlock notNil ifTrue:[
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1197
            abortButton turnOff.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1198
            catchBlock value.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1199
            'oops, abort failed' errorPrintNewline.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1200
            self warn:'unwind failed'.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1201
            abortButton disable.
20
c09545d02817 *** empty log message ***
claus
parents: 15
diff changeset
  1202
        ]
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1203
    ].
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1204
    ^ self.
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1205
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1206
"obsolete ..."
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1207
    Processor activeProcess id == 0 ifTrue:[
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1208
        "dont allow termination of main-thread"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1209
        exitAction := #abort
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1210
    ] ifFalse:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1211
        exitAction := #terminate 
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1212
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1213
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1214
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1215
doTerminate
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1216
    "terminate from menu"
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1217
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1218
    steppedContextAddress := nil.
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1219
    haveControl := false.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1220
    exitAction := #terminate. 
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1221
    ProcessorScheduler isPureEventDriven ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1222
        "exit private event-loop"
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1223
        catchBlock notNil ifTrue:[catchBlock value].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1224
        inspecting ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1225
            'oops, terminate failed' errorPrintNewline.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1226
            self warn:'terminate failed'.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1227
        ].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1228
        terminateButton turnOff; disable.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1229
    ].
7
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1230
!
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1231
92b82578c88c *** empty log message ***
claus
parents: 4
diff changeset
  1232
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1233
doReturn
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1234
    "return from menu"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1235
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1236
    inspecting ifTrue:[^ self].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1237
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1238
    steppedContextAddress := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1239
    haveControl := false.
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1240
    exitAction := #return.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1241
    ProcessorScheduler isPureEventDriven ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1242
        "exit private event-loop"
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1243
        catchBlock notNil ifTrue:[catchBlock value].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1244
        'oops, return failed' errorPrintNewline.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1245
        self warn:'return failed'.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1246
        returnButton turnOff; disable.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1247
    ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1248
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1249
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1250
doRestart
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1251
    "restart from menu"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1252
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1253
    inspecting ifTrue:[^ self].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1254
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1255
    steppedContextAddress := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1256
    haveControl := false.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1257
    exitAction := #restart.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1258
    ProcessorScheduler isPureEventDriven ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1259
        "exit private event-loop"
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1260
        catchBlock notNil ifTrue:[catchBlock value].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1261
        'oops, restart failed' errorPrintNewline.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1262
        self warn:'restart failed'.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1263
        restartButton turnOff; disable
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1264
    ].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1265
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1266
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1267
doTrace
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
  1268
    "tracing - not really implemented ..."
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
  1269
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1270
    |v b|
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1271
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
  1272
    self warn:'this function is not yet implemented'.
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
  1273
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
  1274
false ifTrue:[
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1275
    traceView isNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1276
        v := StandardSystemView on:Display.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1277
        v label:'Debugger-Trace'.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1278
        v icon:icon.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1279
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1280
        b := Button label:'untrace' in:v.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1281
        b origin:(0 @ 0) extent:(1.0 @ (b height)).
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1282
        b action:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1283
            StepInterruptPending := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1284
            tracing := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1285
            v unrealize.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1286
            traceView := nil
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1287
        ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1288
        traceView := ScrollableView for:TextCollector in:v.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1289
        traceView origin:(0 @ (b height))
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1290
                  extent:[v width @ (v height - b height)]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1291
    ].
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1292
    v realize.
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
  1293
].
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1294
    tracing := true.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1295
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1296
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1297
doNoTrace
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1298
    traceView notNil ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1299
        traceView topView destroy.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1300
        traceView := nil.
22
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
  1301
    ].
8b81fea5212b *** empty log message ***
claus
parents: 20
diff changeset
  1302
    tracing := false
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1303
!
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1304
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1305
doContinue
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1306
    "continue from menu"
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1307
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1308
    canContinue ifTrue:[
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1309
        steppedContextAddress := nil.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1310
        tracing := false.
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1311
        haveControl := false.
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1312
        exitAction := #continue.
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1313
        ProcessorScheduler isPureEventDriven ifFalse:[
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1314
            "exit private event-loop"
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1315
            catchBlock notNil ifTrue:[catchBlock value].
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1316
            'oops, continue failed' errorPrintNewline.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1317
            self warn:'continue failed'.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1318
            continueButton turnOff; disable
13
145a9461122e *** empty log message ***
claus
parents: 10
diff changeset
  1319
        ].
15
7fc8fcef7bc6 *** empty log message ***
claus
parents: 14
diff changeset
  1320
    ] ifFalse:[
29
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1321
        inspecting ifFalse:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1322
            'resuming top context' errorPrintNewline.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1323
            self showSelection:1.
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1324
            self doReturn
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1325
        ]
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1326
    ]
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1327
!
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1328
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1329
doInspectContext
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1330
    "launch an inspector on the currently selected context"
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1331
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1332
    selectedContext notNil ifTrue:[
8a72e10043f6 *** empty log message ***
claus
parents: 22
diff changeset
  1333
        selectedContext inspect
0
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1334
    ]
571fd5eee315 Initial revision
claus
parents:
diff changeset
  1335
! !