NoHandlerError.st
author Claus Gittinger <cg@exept.de>
Tue, 01 Feb 2000 22:52:44 +0100
changeset 5225 d74b4c895376
parent 4937 7e723f1daca7
child 5295 f144309dab04
permissions -rw-r--r--
comments; handle class-instvar and comment changes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4554
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
     1
"
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
     2
 COPYRIGHT (c) 1999 by eXept Software AG
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
     3
              All Rights Reserved
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
     4
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
     5
 This software is furnished under a license and may be used
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
     6
 only in accordance with the terms of that license and with the
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
     8
 be provided or otherwise made available to, or used by, any
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
     9
 other person.  No title to or ownership of the software is
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    10
 hereby transferred.
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    11
"
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    12
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    13
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    14
4528
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
GenericException subclass:#NoHandlerError
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
	instanceVariableNames:''
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
	classVariableNames:'EmergencyHandler'
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
	poolDictionaries:''
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
	category:'Kernel-Exceptions'
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
!
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
!NoHandlerError class methodsFor:'documentation'!
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    23
4554
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    24
copyright
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    25
"
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    26
 COPYRIGHT (c) 1999 by eXept Software AG
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    27
              All Rights Reserved
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    28
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    29
 This software is furnished under a license and may be used
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    30
 only in accordance with the terms of that license and with the
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    32
 be provided or otherwise made available to, or used by, any
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    33
 other person.  No title to or ownership of the software is
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    34
 hereby transferred.
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    35
"
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    36
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    37
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    38
!
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    39
4528
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
documentation
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
"
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
    NoHandlerError is raised, if there is no exception handler
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
    or default action for an exception.
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
    The parameter is the unhandled exception.
4554
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    46
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    47
    [Class variables:]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    48
        EmergencyHandler <Block>    this block is evaluated, if no handler was defined
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    49
                                    for a signal (i.e. this one is responsible for the
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    50
                                    unhandled exception debugger).
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    51
                                    Having this being a block allows to globally catch
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    52
                                    these errors - even when no enclosing handler-scope
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    53
                                    around the erronous code exists.
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    54
                                    (as the catch/through does).
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    55
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    56
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    57
    [see also:]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    58
        GenericException 
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    59
        (``Exception handling and signals'': programming/exceptions.html)
4528
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
"
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    61
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    62
4554
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    63
!
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    64
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    65
examples
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    66
"
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    67
    The emergencyHandler stuff is very useful, to prevent endUser applications
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    68
    from entering the debugger.
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    69
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    70
    Some commonly used (useful) emergency handlers are provided in the
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    71
    'useful handlers' section; try them to learn more
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    72
    (especially, the mailingHandler is fun).
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    73
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    74
    Of course, these are only examples - you may define your own handler
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    75
    block and pass it to the #emergencyHandler: method.
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    76
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    77
    BTW: the Launchers 'source & debugger' settings menu allows you
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    78
         to install either a default or the notifying handler.
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    79
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    80
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    81
    A handler which shows a box, then aborts - (no more debuggers):
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    82
                                                                [exBegin]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    83
        NoHandlerError emergencyHandler:(NoHandlerError abortingEmergencyHandler)
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    84
                                                                [exEnd]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    85
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    86
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    87
    A handler which aborts - (no box, no debugger):
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    88
                                                                [exBegin]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    89
        NoHandlerError emergencyHandler:[:ex | AbortSignal raise]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    90
                                                                [exEnd]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    91
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    92
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    93
    try some exception (for demonstration, in some other process):
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    94
                                                                [exBegin]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    95
        [
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    96
            #(1 2 3) at:4
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    97
        ] fork.
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    98
                                                                [exEnd]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
    99
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   100
    cleanup (switch back to the regular handler, which enters the debugger):
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   101
                                                                [exBegin]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   102
        NoHandlerError emergencyHandler:nil
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   103
                                                                [exEnd]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   104
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   105
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   106
    A handler which shows a warnBox and asks for debugging:
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   107
                                                                [exBegin]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   108
        NoHandlerError emergencyHandler:(NoHandlerError notifyingEmergencyHandler)
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   109
                                                                [exEnd]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   110
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   111
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   112
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   113
    A handler which dumps information to a file (watch the file 'errorTrace.stx'):
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   114
                                                                [exBegin]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   115
        NoHandlerError emergencyHandler:(NoHandlerError dumpingEmergencyHandler)
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   116
                                                                [exEnd]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   117
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   118
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   119
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   120
    A handler which sends you mail:
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   121
                                                                [exBegin]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   122
        NoHandlerError emergencyHandler:(NoHandlerError mailingEmergencyHandler)
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   123
                                                                [exEnd]
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   124
"
db264efac2c0 Add copyright.
Stefan Vogel <sv@exept.de>
parents: 4539
diff changeset
   125
4528
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   126
! !
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   128
!NoHandlerError class methodsFor:'initialization'!
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   129
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   130
initialize
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   131
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   132
    NotifierString := 'unhandled exception'.
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   133
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   134
    "
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   135
     self initialize
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   136
    "
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   137
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   138
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   139
! !
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   140
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   141
!NoHandlerError class methodsFor:'emergency handlers'!
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   142
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   143
emergencyHandler
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   144
    "return the handler used for unhandled exceptions.
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   145
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   146
     If no EmergencyHandler has been set, a handler which enters the 
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   147
     debugger is returned.
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   148
     The debugger is opened by asking the signal for a debug action,
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   149
     this allows to provide other debuggers in specialized (subclass-instances)
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   150
     of Signal (if that is ever needed)"
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   151
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   152
    "
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   153
     set it up, when called the first time
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   154
    "
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   155
    EmergencyHandler isNil ifTrue:[
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   156
        EmergencyHandler := [:ex |
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   157
            "
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   158
             sending it to the signal allows per-signal specific
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   159
             debuggers to be implemented in the future
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   160
             (for example, segv in primitive code could show things 
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   161
              on the C-level ..)
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   162
            "
4586
22c84f7f9b85 return nil from raise if proceeded in the debugger
Claus Gittinger <cg@exept.de>
parents: 4561
diff changeset
   163
            (ex signal) openDebuggerOnException:ex.
22c84f7f9b85 return nil from raise if proceeded in the debugger
Claus Gittinger <cg@exept.de>
parents: 4561
diff changeset
   164
            "/ if we arrive here, the debugger proceeded.
22c84f7f9b85 return nil from raise if proceeded in the debugger
Claus Gittinger <cg@exept.de>
parents: 4561
diff changeset
   165
            "/ the value below is the exceptions value ...
22c84f7f9b85 return nil from raise if proceeded in the debugger
Claus Gittinger <cg@exept.de>
parents: 4561
diff changeset
   166
            nil
4528
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   167
        ]
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   168
    ].
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   169
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   170
    ^ EmergencyHandler
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   171
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   172
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   173
!
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   174
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   175
emergencyHandler:aOneArgBlock
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   176
    "set the handler used for unhandled exceptions.
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   177
     The default (a nil-handler) leads to a debugger to be shown."
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   178
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   179
    EmergencyHandler := aOneArgBlock
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   180
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   181
    "ST-80 behavior of first showing a notifier:
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   182
     (I prefer to get right into the debugger, though)
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   183
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   184
     Exception
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   185
        emergencyHandler:
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   186
            [:ex | self errorNotify:ex errorString ]
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   187
    "
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   188
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   189
    "ST-X behavior of going right into the debugger:
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   190
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   191
     Exception
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   192
        emergencyHandler:nil
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   193
    "
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   194
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   195
    "automatically aborting current operation, on error:
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   196
     (may be useful for end-user apps; make certain, 
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   197
      you have abortSignal handlers at appropriate places)
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   198
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   199
     Exception
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   200
        emergencyHandler:
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   201
            [:ex | Object abortSignal raise. ex return. ]
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   202
    "
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   203
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   204
    "finally, traditional language system behavior; dump core ;-)
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   205
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   206
     Exception
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   207
        emergencyHandler:
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   208
            [:ex | Smalltalk exitWithCoreDump. ]
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   209
    "
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   210
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   211
    "Modified: 15.1.1997 / 20:49:06 / cg"
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   212
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   213
! !
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   214
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   215
!NoHandlerError methodsFor:'default actions'!
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   216
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   217
defaultAction
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   218
    "This action is performed, if nobody handles the NoHandlerError.
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   219
     Look for either a per-process emergencyHandlerBlock 
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   220
     or the global emergencyHandler (from Exception) ..."
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   221
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   222
    |block|
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   223
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   224
    Processor notNil ifTrue:[ 
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   225
        "care for signal during startup (Processor not yet created)"
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   226
        block := Processor activeProcess emergencySignalHandler.
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   227
    ].
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   228
    block isNil ifTrue:[
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   229
        block := self class emergencyHandler.
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   230
        block isNil ifTrue:[
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   231
            "care for error during startup (Exception not yet initialized)"
4539
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   232
            ^ MiniDebugger 
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   233
                enterWithMessage:self errorString 
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   234
                mayProceed:self mayProceed
4528
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   235
        ].
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   236
    ].
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   237
4586
22c84f7f9b85 return nil from raise if proceeded in the debugger
Claus Gittinger <cg@exept.de>
parents: 4561
diff changeset
   238
    ^ block value:self
4528
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   239
4561
c82f8c848d4c Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4554
diff changeset
   240
!
c82f8c848d4c Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4554
diff changeset
   241
c82f8c848d4c Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4554
diff changeset
   242
noHandler
c82f8c848d4c Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4554
diff changeset
   243
    "redefined to avoid recursive invocations"
c82f8c848d4c Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4554
diff changeset
   244
c82f8c848d4c Add #description, #creator
Stefan Vogel <sv@exept.de>
parents: 4554
diff changeset
   245
    ^ self
4528
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   246
! !
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   247
4539
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   248
!NoHandlerError methodsFor:'queries'!
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   249
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   250
mayProceed
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   251
    "return true, if the exception handler is allowed to proceed
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   252
     the execution where the exception occured."
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   253
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   254
    parameter isNil ifTrue:[^ true].
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   255
    ^ parameter mayProceed
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   256
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   257
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   258
! !
7064506e8285 debugger entry protocol changed;
Claus Gittinger <cg@exept.de>
parents: 4528
diff changeset
   259
4528
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   260
!NoHandlerError class methodsFor:'documentation'!
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   261
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   262
version
4937
7e723f1daca7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4586
diff changeset
   263
    ^ '$Header: /cvs/stx/stx/libbasic/NoHandlerError.st,v 1.6 1999-10-25 15:10:55 cg Exp $'
4528
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   264
! !
5ef0de6abb50 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   265
NoHandlerError initialize!