有什麼辦法可以防止生鏽?在終端圖形庫中,如果當前發生異常,則在顯示前異常將被刷新;使編程非常難以使用該庫進行調試。將恐慌重定向到指定的緩衝區
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