From 164228e15a8b62666fd8fa342a214b1417e195c8 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 14 Oct 2026 14:08:56 +0800 Subject: [PATCH] =?UTF-8?q?diag(vkernel):=20=E6=A1=8C=E9=9D=A2=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E6=AF=8F=E7=A7=92=E5=BF=83=E8=B7=B3=EF=BC=8C=E6=89=93?= =?UTF-8?q?=E5=8D=B0=E8=84=8F=E8=A1=8C/=E6=B8=B2=E6=9F=93/=E7=AA=97?= =?UTF-8?q?=E5=8F=A3/=E5=85=89=E6=A0=87=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 现象:日志停在 “[desktop] thread started”,QEMU 卡死;屏幕只有上方一小块变蓝、 UEFI 文本未被覆盖 —— 指向渲染/刷新阶段的 _dirty_* 状态不正确(而非整屏写入卡住)。 在 desktop_thread 主循环的“每秒”分支打印: [dt] sec=… dc=… dymin=… dymax=… rc=… win=… cx=… cy=… 作用: - 若完全没有 [dt] 输出 → 线程在首轮之前就卡住(_mark_all_dirty 或循环顶部); - 若有输出且 sec 递增 → 线程在跑,问题在渲染/刷新(dc/dymax 数值即可解释 “只刷顶部一小块”)。 定位后连同其它 [DIAG] 一并移除。 --- VKernel/Kernel/services/desktop.vp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/VKernel/Kernel/services/desktop.vp b/VKernel/Kernel/services/desktop.vp index f4ae5cc..719da38 100644 --- a/VKernel/Kernel/services/desktop.vp +++ b/VKernel/Kernel/services/desktop.vp @@ -1703,6 +1703,11 @@ def desktop_thread(arg: rawptr) -> int: _dt_cur_sec: uint32 = timer.timer_get_seconds() if _dt_cur_sec != _dt_hb_sec: _dt_hb_sec = _dt_cur_sec + # [DIAG] 每秒心跳:打印渲染/脏行/窗口/光标关键状态(定位“只刷顶部一小块+卡死”) + _dt_dbg: [144]char + viperlib.snprintf(&_dt_dbg, 144, "[dt] sec=%u dc=%d dymin=%d dymax=%d rc=%d win=%d cx=%d cy=%d\n", + _dt_cur_sec, _dirty_count, _dirty_y_min, _dirty_y_max, _render_count, _win_count, _cursor_x, _cursor_y) + serial.puts(&_dt_dbg) cur_sec: uint32 = timer.timer_get_seconds() if cur_sec != _last_clock_sec: _last_clock_sec = cur_sec