diff options
author | Timothee Cour <timothee.cour2@gmail.com> | 2020-03-30 04:45:32 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-30 13:45:32 +0200 |
commit | 19cab9fa51fdb9a244ca35e978e9daa8cc81a785 (patch) | |
tree | 18200faaf701d17e1980f31bfa6c3833a6dfba5e /tests/stdlib/mstackframes.nim | |
parent | 8088633250872de8777c7078e636b2379780e107 (diff) | |
download | Nim-19cab9fa51fdb9a244ca35e978e9daa8cc81a785.tar.gz |
stacktraces can now show custom runtime msgs per frame (#13351)
* 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
Diffstat (limited to 'tests/stdlib/mstackframes.nim')
-rw-r--r-- | tests/stdlib/mstackframes.nim | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/stdlib/mstackframes.nim b/tests/stdlib/mstackframes.nim new file mode 100644 index 000000000..f3daa1437 --- /dev/null +++ b/tests/stdlib/mstackframes.nim @@ -0,0 +1,38 @@ +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() |