refactor(tpv): set_asan_mode 移除改直接赋 _asan_mode bool;ClassGenEnum 加 Renum 字段 0xb0 崩溃定位临时诊断(定位后移除)

This commit is contained in:
TermiNexus committed 2026-08-21 01:37:51 +08:00
1 parent 0e48190ba9
commit ca1453c0ec
2 files changed
+27 -2

No files matched your search

+25
View File
@@ -878,6 +878,31 @@ class ClassGenEnum(ClassGenBase.ClassGenBase):
string.memset(self.RenumVariantTags, 0, 8 * RENUM_CLASS_MAX * RENUM_VARIANT_PER_CLASS)
self.RenumClassCount = 0
# ============ 临时诊断(0xb0 崩溃定位,定位后移除) ============
# lazy init 后 RenumClassNames 必非空;此时若 RCV 异常(null/小值)
# 说明字段被越界覆盖或 __init__ 未生效,fail-fast 暴露崩溃现场。
fb_diag: str = VLogger.fmt_buf()
if fb_diag is not None:
viperlib.snprintf(fb_diag, 1024,
"[RENUM-DIAG] self=%llu RN=%llu RCV=%llu RVN=%llu RVT=%llu RCount=%d class=%s",
t.CUInt64T(self), t.CUInt64T(self.RenumClassNames),
t.CUInt64T(self.RenumClassVariantCounts),
t.CUInt64T(self.RenumVariantNames),
t.CUInt64T(self.RenumVariantTags),
self.RenumClassCount, class_name)
VLogger.info(fb_diag, "RENUM")
rcv_chk: t.CUInt64T = t.CUInt64T(self.RenumClassVariantCounts)
if rcv_chk == 0 or rcv_chk < 4096:
fb_fail: str = VLogger.fmt_buf()
if fb_fail is not None:
viperlib.snprintf(fb_fail, 1024,
"[RENUM-FAIL] RCV=%llu 异常(lazy init 后应为 perm_pool 地址),RenumClassCount=%d class=%s",
t.CUInt64T(self.RenumClassVariantCounts),
self.RenumClassCount, class_name)
VLogger.error(fb_fail, "RENUM")
stdlib.exit(1)
# ============ 临时诊断结束 ============
# 检查是否已注册(避免重复注册)
for i in range(self.RenumClassCount):
existing: str = self.RenumClassNames[i]
+2 -2
View File
@@ -258,7 +258,7 @@ Target: %s
# includes 缓存用独立目录 .binary_asan 隔离 asan 插桩 obj,避免与非 asan obj 混链
# (asan obj 引用 __asan_init 等符号,非 asan 链接不提供 asan 库 → undefined reference)
if args.get_bool("asan"):
BuildPipeline.set_asan_mode(1)
BuildPipeline._asan_mode = True
Config.set_inc_bin_suffix(".binary_asan")
if log is not None:
log.info("ASan 模式已启用(opt -passes=asan + libclang_rt)", "asan")
@@ -272,7 +272,7 @@ Target: %s
viperlib.snprintf(fb_asan, 1024, "ASan 模式清理 includes 缓存: %d 个文件(将重建 asan obj)", n_asan)
log.info(fb_asan, "asan")
else:
BuildPipeline.set_asan_mode(0)
BuildPipeline._asan_mode = False
Config.set_inc_bin_suffix(".binary")
# --nowarn-register:抑制"外部函数返回类型未登记"类 WARN 输出