tao-of-rust-codes
tao-of-rust-codes copied to clipboard
9.4 Panic 【示例代码输出有误,引起误解】
9.4 恐慌(Panic)
315页的最后4行
示例 代码清单 9-33 运行后的输出行在排版中顺序有误,应该是 先输出正常的println! 的结果 (hello),然后,是panic回滚的消息,最后是 接下来的正常输出。
正确的应该是:
hello.
thread 'main' panicked at 'oh, no!', panic.rs:10:38
note: run with RUST_BACKTRACE=1
environment variable to display a backtrace.
3
而非:
thread 'main' panicked at 'oh, no!', panic.rs:10:38
note: run with RUST_BACKTRACE=1
environment variable to display a backtrace.
hello.
3
在写完前面这些内容的时候,再去较对书内容的时候,发现里面有一句 “-------- standard output ” 但在看书的时候,就会不注意到,一直以为是正常的输出。 那么问题来了,为什么中间阶段输出的东西会在前面呢?是不是系统会自动的重定向到哪里, 然后,收集后,先输出“错误级别高”的东西,这个很没有道理。
总之,容易引起误解。
严格说起来,应该是表达方式不好。不是“有误”。
另外一个问题,设置 RUST_BACKTRACE=1 后,输出的栈信息看不懂,层次太深了,都是与 panic! 有关的,而与用户代码关系不清晰,有什么改进方法吗?
参考 gcc -g 编译的C语言可执行程序,在linux 设置 coredump 情况下,运行的结果,调用 gdb 很方便就找到错误点,这时候 bt 一下,那个栈就很清楚。
@xie-jirong xie 感谢反馈。 示例上面的错误信息,只是一个示意,具体肯定和读者们实际的本地信息略有区别。不过你的建议我会考虑后续改进一下。