Stack traces: Difference between revisions
Content deleted Content added
m Unicon/Icon consistency |
m Unicon/Icon consistency 2 |
||
Line 265:
[THEN]</lang>
==
==={{header|Icon}}===
An example using base Icon hasn't been provided.
==={{header|Unicon}}===
The code for <tt>buildStackTrace</tt> is taken verbatim from the UniLib package.
If that package is installed, then adding:
<lang Unicon>import Utils</lang> at the start would be sufficient.
<lang Unicon>procedure main()
g()
write()
f()
end
procedure f()
g()
end
procedure g()
# Using 1 as argument omits the trace of buildStackTrace itself
every write("\t",!buildStackTrace(1))
end
#<p>
# Compute the current stack trace. Starting at level <i>n</i> above
# the current procedure. Here, <i>n</i> defaults to 0, which will
# include this procedure in the stack trace.
# <i>ce</i> defaults to ¤t.
# <i>This only works with newer versions of Unicon!</i>
# <[generates the stacktrace from current call back to first
# in the co-expression]>
#</p>
procedure buildStackTrace(n:0, # starting distance from this call
ce # co-expr to trace stack in [¤t]
)
local L
/ce := ¤t
L := []; n -:= 1
while pName := image(proc(ce, n+:=1)) do {
fName := keyword("&file",ce,n) | "no file name"
fLine := keyword("&line",ce,n) | "no line number"
put(L, pName||" ["||fName||":"||fLine||"]" )
}
return L
end</lang>
The output of this example is:
<pre>
procedure g [Stacktrace.icn:13]
procedure main [Stacktrace.icn:2]
procedure g [Stacktrace.icn:13]
procedure f [Stacktrace.icn:8]
procedure main [Stacktrace.icn:4]
</pre>
=={{header|J}}==
|