有什么办法可以防止生锈?在终端图形库中,如果当前发生异常,则在显示前异常将被刷新;使编程非常难以使用该库进行调试。将恐慌重定向到指定的缓冲区
impl Drop for Terminal {
fn drop(&mut self) {
self.outbuffer.write_all(&self.driver.get(DevFn::ShowCursor)).unwrap();
self.outbuffer.write_all(&self.driver.get(DevFn::Reset)).unwrap();
self.outbuffer.write_all(&self.driver.get(DevFn::Clear)).unwrap();
self.outbuffer.write_all(&self.driver.get(DevFn::ExitCa)).unwrap();
self.flush().unwrap(); // If an exception occurs, this will reclear the screen and remove the output
self.termctl.reset().unwrap();
SIGWINCH_STATUS.store(false, Ordering::SeqCst);
RUSTTY_STATUS.store(false, Ordering::SeqCst);
}
}
如果我注释掉self.flush().unwrap();
异常将打印,但是终端将无法正确刷新屏幕,并使当前的程序结束后,即使在终端上的图形。
是否可以在程序开始时指定用于写入的自定义缓冲区恐慌?或者可能写一个黑客伎俩来做到这一点?这样,在刷新之后,我们可以检查是否有任何东西在这个缓冲区内,如果有的话,我们知道发生了异常并可以打印出来。
注释掉self.flush().unwrap();
不过,我们欢迎与实际的异常,而是一个非常难看的终端现在。该解决方案将无法正常工作程序,正确执行,仍然需要,因为不需要错误显示
我怀疑有做到这一点的好办法,但也许这个功能将是有用的:https://doc.rust-lang.org/std/rt/unwind/fn.panicking.html – Adrian
@阿德里安这是不稳定的想法;(。谢谢我会试一试 –
这个不是不稳定的:https://doc.rust-lang.org/std/thread/fn.panickin g.html – Adrian