mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
* stacktraces can now show custom runtime msgs * improve tests/stdlib/tstackframes.nim * fix test for --gc:arc * test --stacktraceMsgs:on and --stacktraceMsgs:off * --stacktracemsgs:off by default
39 lines
868 B
Nim
39 lines
868 B
Nim
import std/stackframes
|
|
|
|
|
|
|
|
# line 5
|
|
var count = 0
|
|
|
|
proc main1(n: int) =
|
|
setFrameMsg $("main1", n)
|
|
if n > 0:
|
|
main1(n-1)
|
|
|
|
proc main2(n: int) =
|
|
count.inc
|
|
setFrameMsg $("main2", n, count)
|
|
proc bar() =
|
|
setFrameMsg $("bar ",)
|
|
if n < 3: raise newException(CatchableError, "on purpose")
|
|
bar()
|
|
main2(n-1)
|
|
|
|
proc main() =
|
|
var z = 0
|
|
setFrameMsg "\n z: " & $z, prefix = ""
|
|
# multiple calls inside a frame are possible
|
|
z.inc
|
|
setFrameMsg "\n z: " & $z, prefix = ""
|
|
try:
|
|
main2(5)
|
|
except CatchableError:
|
|
main1(10) # goes deep and then unwinds; sanity check to ensure `setFrameMsg` from inside
|
|
# `main1` won't invalidate the stacktrace; if StackTraceEntry.frameMsg
|
|
# were a reference instead of a copy, this would fail.
|
|
let e = getCurrentException()
|
|
let trace = e.getStackTrace
|
|
echo trace
|
|
|
|
main()
|