有没有办法做到这一点?在终端图形库中,如果发生异常,异常会在显示之前被刷新掉,使用该库很难进行编程调试。
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();
异常会打印,但是即使程序结束,终端也不会正确刷新屏幕并在终端上留下图形。
是否可以在程序开始时指定用于写入的自定义缓冲区恐慌?或者可能写一个hacky技巧来做到这一点?这样,在刷新之后,我们可以检查这个缓冲区内是否有任何东西,如果有,我们就知道发生了异常并可以将其打印出来。
然而,通过注释掉self.flush().unwrap();
,我们看到了实际的异常,但现在是一个非常丑陋的终端。此解决方案将不起作用,因为正确执行的程序仍需要刷新,因为不需要显示错误