Julia 如何打印错误的完整堆栈跟踪?

Julia 如何打印错误的完整堆栈跟踪?,julia,Julia,println不打印堆栈跟踪,此代码 try eval(Meta.parse("invalidfn()")) catch error println(error) end 产生 UndefVarError(:invalidfn) 和error.msg或字段名(error)不起作用。您可以与以下命令中的@error宏一起使用: 或者,您可以直接调用(未记录的)三个参数: @giordano谢谢,但它看起来与控制台中默认错误的外观不同,有没有办法以相同的格式打印它?如果你在一个catch

println
不打印堆栈跟踪,此代码

try
  eval(Meta.parse("invalidfn()"))
catch error
  println(error)
end
产生

UndefVarError(:invalidfn)
error.msg
字段名(error)
不起作用。

您可以与以下命令中的
@error
宏一起使用:

或者,您可以直接调用(未记录的)三个参数:


@giordano谢谢,但它看起来与控制台中默认错误的外观不同,有没有办法以相同的格式打印它?如果你在一个catch中抛出(e),我认为这与“做正常的事情”是一样的。@chrisrackaus我不能抛出它,如果我抛出一个异常,将有无限的
while
循环退出。@AlexeyPetrushin查看更新后的答案,三个参数
showerror
应该是您要找的。@giordano我没有注意到它,谢谢,是的,它按预期工作。
julia> try
         eval(Meta.parse("invalidfn()"))
       catch e
         @error "Something went wrong" exception=(e, catch_backtrace())
       end
┌ Error: Something went wrong
│   exception =
│    UndefVarError: invalidfn not defined
│    Stacktrace:
│     [1] top-level scope at REPL[1]:1
│     [2] eval at ./boot.jl:330 [inlined]
│     [3] eval(::Expr) at ./client.jl:425
│     [4] top-level scope at REPL[1]:2
│     [5] eval(::Module, ::Any) at ./boot.jl:330
│     [6] eval_user_input(::Any, ::REPL.REPLBackend) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/REPL/src/REPL.jl:86
│     [7] macro expansion at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/REPL/src/REPL.jl:118 [inlined]
│     [8] (::REPL.var"#26#27"{REPL.REPLBackend})() at ./task.jl:333
└ @ Main REPL[1]:4
julia> try
         eval(Meta.parse("invalidfn()"))
       catch e
         showerror(stdout, e, catch_backtrace())
       end
UndefVarError: invalidfn not defined
Stacktrace:
 [1] top-level scope at REPL[1]:1
 [2] eval at ./boot.jl:330 [inlined]
 [3] eval(::Expr) at ./client.jl:425
 [4] top-level scope at REPL[1]:2
 [5] eval(::Module, ::Any) at ./boot.jl:330
 [6] eval_user_input(::Any, ::REPL.REPLBackend) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/REPL/src/REPL.jl:86
 [7] macro expansion at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/REPL/src/REPL.jl:118 [inlined]
 [8] (::REPL.var"#26#27"{REPL.REPLBackend})() at ./task.jl:333