From d926987d449fe9114cdee9c4dd4ec109c30b3836 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Fri, 9 Oct 2026 13:04:40 +0800 Subject: [PATCH] =?UTF-8?q?chore(dbg):=20=E6=B8=85=E9=99=A4=20P4=20?= =?UTF-8?q?=E8=BD=AC=E7=A7=BB=E5=88=86=E6=94=AF=E7=9A=84=E9=80=90=E7=82=B9?= =?UTF-8?q?=E6=8E=A2=E9=92=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 崩点根因已定位(slife 登记表跨文件悬垂),debugger 探针全部移除。 --- App/lib/core/Gen/AssignGenMixin.vp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/App/lib/core/Gen/AssignGenMixin.vp b/App/lib/core/Gen/AssignGenMixin.vp index c7a6605..02dc840 100644 --- a/App/lib/core/Gen/AssignGenMixin.vp +++ b/App/lib/core/Gen/AssignGenMixin.vp @@ -765,17 +765,12 @@ novirtual class AssignGenMixin: # (q 置 1、p 置 0)。此后对 p 重新赋值不会释放对象(p 已不拥有该对象), # 出口只释放 q 一次。不转移的话,`p = None` 会把 q 指向的对象提前释放 → q 悬垂。 if src_slot is not None: - VLogger.info(f"dbg.xfer owned={self.Gen.VarGen._SlifeOwned(src_slot)}", "TR") if self.Gen.VarGen._SlifeOwned(src_slot) != 0: - VLogger.info("dbg.xfer.p4.begin", "TR") tsh: mlirlite.Value* = self.Gen.VarGen._SlifeEnsureOwned(pool, builder, target_slot) - VLogger.info("dbg.xfer.ensured", "TR") if tsh is not None: - VLogger.info("dbg.xfer.drop.begin", "TR") # 覆盖释放 target 原有对象:若它与源是**同一个对象**(自别名 `q = p; q = p`) # 则跳过,否则会把两个槽共持的对象提前释放。 self.Gen.VarGen._SlifeDropOwnedUnlessSame(pool, builder, mod, trans, target_slot, src_slot) - VLogger.info("dbg.xfer.dropped", "TR") self.Gen.VarGen._SlifeNoteStore(pool, builder, tsh, 1) ssh: mlirlite.Value* = self.Gen.VarGen._SlifeShadow(src_slot) if ssh is not None: self.Gen.VarGen._SlifeNoteStore(pool, builder, ssh, 0)