From dfa5a81c8d09a0f54ba706489f85827c620b529a Mon Sep 17 00:00:00 2001 From: pointer-to-bios Date: Fri, 3 May 2024 05:40:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E4=BD=BF=E7=94=A8rust=20pani?= =?UTF-8?q?c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/contribution.md | 7 ++----- src/lib.rs | 8 ++++++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/contribution.md b/docs/contribution.md index b9d3015..3b475b1 100644 --- a/docs/contribution.md +++ b/docs/contribution.md @@ -28,9 +28,6 @@ vscode下的`rust-analyzer`插件会在`src/lib.rs`中误报`can't find crate fo ] ``` -## 需要注意的还未解决的问题 +## 需要注意的问题 -* rust中所有有关字符串格式化的宏中,出现超过一个不止是`{}`的格式化占位符时内核必然崩溃。 -* rust中所有有关字符串格式化的宏中,出现需要调用自定义的`Debug trait`的类型时内核必然崩溃,推荐定义`ToString trait`并调用`.to_string()`后传入宏参数。 -* 鉴于以上两条原因,不建议在复杂的字符串格式化任务中使用`format!()`宏。推荐通过使用`::kernel::tty::tty::MessageBuilder`构造`kernel::tty::tty::Message`对象,或使用 - `message`宏,并调用此对象的`.to_string()`方法实现格式化字符串。 +* 在任何情况下不要使用Rust的panic。 diff --git a/src/lib.rs b/src/lib.rs index 642c3f5..9563a24 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,10 +6,18 @@ extern crate alloc; use core::panic::PanicInfo; +use kernel::tty::tty::Tty; + pub mod kernel; pub mod libk; #[panic_handler] unsafe fn kernel_panic_handler(_info: &PanicInfo) -> ! { + let tty = Tty::from_id(0).unwrap(); + tty.enable(); + tty.print(message!( + "Hit a {Rust} panic.", + FmtMeta::Color(Color::ORANGE) + )); loop {} }