Stack traces: Difference between revisions
Content added Content deleted
(Added Kotlin) |
(Added REXX (Regina flavour)) |
||
Line 1,540: | Line 1,540: | ||
Selection: |
Selection: |
||
</pre> |
</pre> |
||
=={{header|REXX}}== |
|||
{{works with|Regina}} |
|||
<lang rexx>/* call stack */ |
|||
say 'Call A' |
|||
call A '123' |
|||
say result |
|||
exit 0 |
|||
A: |
|||
say 'Call B' |
|||
call B '456' |
|||
say result |
|||
return ARG(1) |
|||
B: |
|||
say 'Call C' |
|||
call C '789' |
|||
say result |
|||
return ARG(1) |
|||
C: |
|||
call callstack |
|||
return ARG(1) |
|||
callstack: procedure |
|||
getcallstack(cs.) |
|||
say 'Dump call stack with' cs.0 'items' |
|||
do i = 1 to cs.0 |
|||
parse var cs.i line func |
|||
say format(line, 3) ':' left(func, 9) ': source "' || sourceline(line) || '"' |
|||
end |
|||
return cs.0</lang> |
|||
{{out}} |
|||
<pre>prompt$ regina callstack.rexx |
|||
Call A |
|||
Call B |
|||
Call C |
|||
Dump call stack with 4 items |
|||
20 : CALLSTACK : source "call callstack" |
|||
15 : C : source "call C '789'" |
|||
9 : B : source "call B '456'" |
|||
3 : A : source "call A '123'" |
|||
789 |
|||
456 |
|||
123</pre> |
|||
Regina will also dump a call stack during certain error conditions. For instance, if the code listing above raised an unhandled signal (simulated here with "signal noname" in routine C). This is not a recoverable scenario though, and the program will not continue. |
|||
<lang rexx>C: |
|||
signal noname |
|||
call callstack |
|||
return ARG(1)</lang> |
|||
{{out}} |
|||
<pre>prompt$ regina callstack.rexx |
|||
Call A |
|||
Call B |
|||
Call C |
|||
20 +++ signal noname |
|||
15 +++ call C '789' |
|||
9 +++ call B '456' |
|||
3 +++ call A '123' |
|||
Error 16 running "/home/btiffin/forge/gnucobol/extensions/demos/callstack.rexx", line 20: Label not found |
|||
Error 16.1: Label "NONAME" not found</pre> |
|||
=={{header|Racket}}== |
=={{header|Racket}}== |