writeStackTrace now officially has no IO effect anymore for more convenient debugging

This commit is contained in:
Andreas Rumpf
2018-01-21 21:08:51 +01:00
parent 8c98277d5a
commit 6266c68ab6
3 changed files with 8 additions and 4 deletions

View File

@@ -220,3 +220,6 @@ styledEcho "Red on Green.", resetStyle
- If you use ``--dynlibOverride:ssl`` with OpenSSL 1.0.x, you now have to
define ``openssl10`` symbol (``-d:openssl10``). By default OpenSSL 1.1.x is
assumed.
- ``writeStackTrace`` is now proclaimed to have no IO effect (even though it does)
so that it is more useful for debugging purposes.

View File

@@ -3211,9 +3211,10 @@ when not defined(JS): #and not defined(nimscript):
## allows you to override the behaviour of your application when CTRL+C
## is pressed. Only one such hook is supported.
proc writeStackTrace*() {.tags: [WriteIOEffect], gcsafe.}
proc writeStackTrace*() {.tags: [], gcsafe.}
## writes the current stack trace to ``stderr``. This is only works
## for debug builds.
## for debug builds. Since it's usually used for debugging, this
## is proclaimed to have no IO effect!
when hostOS != "standalone":
proc getStackTrace*(): string {.gcsafe.}
## gets the current stack trace. This only works for debug builds.

View File

@@ -386,9 +386,9 @@ proc writeStackTrace() =
when hasSomeStackTrace:
var s = ""
rawWriteStackTrace(s)
showErrorMessage(s)
cast[proc (s: string) {.noSideEffect, tags: [], nimcall.}](showErrorMessage)(s)
else:
showErrorMessage("No stack traceback available\n")
cast[proc (s: string) {.noSideEffect, tags: [], nimcall.}](showErrorMessage)("No stack traceback available\n")
proc getStackTrace(): string =
when hasSomeStackTrace: