tao-of-rust-codes icon indicating copy to clipboard operation
tao-of-rust-codes copied to clipboard

9.4 Panic 【示例代码输出有误,引起误解】

Open xie-jirong opened this issue 5 years ago • 3 comments

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 ” 但在看书的时候,就会不注意到,一直以为是正常的输出。 那么问题来了,为什么中间阶段输出的东西会在前面呢?是不是系统会自动的重定向到哪里, 然后,收集后,先输出“错误级别高”的东西,这个很没有道理。

总之,容易引起误解。

xie-jirong avatar Dec 18 '19 10:12 xie-jirong

严格说起来,应该是表达方式不好。不是“有误”。

xie-jirong avatar Dec 18 '19 10:12 xie-jirong

另外一个问题,设置 RUST_BACKTRACE=1 后,输出的栈信息看不懂,层次太深了,都是与 panic! 有关的,而与用户代码关系不清晰,有什么改进方法吗?

参考 gcc -g 编译的C语言可执行程序,在linux 设置 coredump 情况下,运行的结果,调用 gdb 很方便就找到错误点,这时候 bt 一下,那个栈就很清楚。

xie-jirong avatar Dec 18 '19 10:12 xie-jirong

@xie-jirong xie 感谢反馈。 示例上面的错误信息,只是一个示意,具体肯定和读者们实际的本地信息略有区别。不过你的建议我会考虑后续改进一下。

ZhangHanDong avatar Dec 18 '19 13:12 ZhangHanDong