作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是getStackTrace()
从当前异常获取堆栈跟踪的函数。
但它不适用于特定的异常,此代码不起作用 error.getStackTrace()
我需要它 log
功能
proc error*(message: string, exception: Exception): void =
stderr.write_line fmt" {message}"
stderr.write_line exception.getStackTrace()
最佳答案
你的示例代码甚至不适合我编译,因为 getCurrentException返回对异常的引用而不是它的副本,因此无法将其传递给 error()
.这是为我编译的完整示例:
proc failHard() =
doAssert toInt(1.49) == 0
proc error*(message: string, exception: ref Exception) =
echo message
echo exception.getStackTrace()
proc main() =
try: failHard()
except: error("oops", getCurrentException())
main()
当我编译并运行这个程序时,我得到以下输出:
$ ./t
oops
/private/tmp/t/t.nim(12) t
/private/tmp/t/t.nim(9) main
/private/tmp/t/t.nim(2) failHard
/Users/gradha/.choosenim/toolchains/nim-1.2.6/lib/system/assertions.nim(29) failedAssertImpl
/Users/gradha/.choosenim/toolchains/nim-1.2.6/lib/system/assertions.nim(22) raiseAssert
/Users/gradha/.choosenim/toolchains/nim-1.2.6/lib/system/fatal.nim(49) sysFatal
请注意
getStackTrace() documentation提到它在非调试版本中没有提供太多信息:
$ nim c -d:release -r t.nim
Hint: used config file '/Users/gradha/.choosenim/toolchains/nim-1.2.6/config/nim.cfg' [Conf]
Hint: 320 LOC; 0.096 sec; 5.379MiB peakmem; Release build; proj: /private/tmp/t/t.nim; out: /private/tmp/t/t [SuccessX]
Hint: /private/tmp/t/t [Exec]
oops
fatal.nim(49) sysFatal
关于nim-lang - 如何从 Nim 中的异常获取堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63703489/
我是一名优秀的程序员,十分优秀!