Writing a stack dump exception routine
There are cases when you might not want to receive a stack dump. VA Smalltalk Server provides a method which allows you to ignore an error condition and perform your own exception routine. This method also allows you to produce a stack dump at your discretion.
The whenExceptionDo: method permits you to write a block of code that suspends normal processing for your own exception routine. In this block, you can choose to produce a stack dump and exit the server application without returning to Smalltalk processing.
The method is used by specifying a block of code, which can be your application launch code, then a block of code that performs your exception routine. For example, the following doit method launches a server application and, if that launch fails, produces a stack dump and exits the image without allowing Smalltalk to regain control.
doit
| startUpClass dumperClass |
[MyClass run]
whenExceptionDo: [
startUpClass := System startUpClass.
(startUpClass respondsTo: #stackDumperClass)
ifTrue: [dumperClass := startUpClass stackDumperClass].
Transcript cr;
show: 'startUpClass=',startUpClass printString;
cr;
show: 'dumperClass=',dumperClass printString;
cr; flush.
 
"Test for a dumper class before dumping the stack"
(dumperClass isNil) ifFalse: [
Transcript show: 'dumping Stack ...... '; cr; flush.
dumperClass dumpStack: 'This is the Stack Dump Message'].
Transcript show: 'explicit return to CICS prevents exception abend';
cr; flush.
System exit]
You can also use the method System exit:withObject: to exit with a user return code. If you are running under CICS, you must use CICS return exec to exit the image without allowing Smalltalk to regain control.
Last modified date: 05/10/2019