chore: 移除 DDEBUG/MATCHDBG 调试日志残留

This commit is contained in:
TermiNexus committed 2026-08-07 23:29:39 +08:00
1 parent 989e898a93
commit e2bdfc1c4e
4 files changed
-206

No files matched your search

-36
View File
@@ -3,7 +3,6 @@ from stdint import *
import ast
import string
import stdlib
import stdio
import sys
import memhub
import llvmlite
@@ -379,17 +378,6 @@ def _resolve_vpi_ret_annot_str(pool: memhub.MemBuddy | t.CPtr,
return None
# ============================================================
# _ddebug_exit - DDEBUG 拦截退出辅助函数
#
# 刷新 stderr 缓冲区并通过 VLogger 输出可见消息后退出。
# 解决 sys.exit(1) 不刷新缓冲区导致 DDEBUG 消息丢失的问题。
# ============================================================
def _ddebug_exit() -> None:
stdio.fflush(stdio.stderr)
VLogger.error("DDEBUG intercept triggered - check stderr for details")
# ============================================================
# VpiReader - .vpi AST 解析器
#
@@ -446,11 +434,6 @@ def _extract_sha1_from_path(vpi_path: str) -> str:
return None
string.strncpy(sha1_buf, vpi_path + sep_pos, SHA1_LEN)
sha1_buf[SHA1_LEN] = '\0'
# DDEBUG: 检测从路径提取的 SHA1 是否带尾随点(>=17 字符),发现问题立即终止
_ext_sl: t.CSizeT = string.strlen(sha1_buf)
if _ext_sl >= 17:
stdio.printf("[DDEBUG] _extract_sha1_from_path too long: len=%d sha1='%s' path='%s'\n", _ext_sl, sha1_buf, vpi_path)
_ddebug_exit()
return sha1_buf
@@ -649,25 +632,6 @@ def _inject_function_declare(pool: memhub.MemBuddy | t.CPtr,
else:
mangled_name = HandlesFunctions._mangle_name_with_sha1(src_sha1, fd.name)
# DDEBUG: VpiReader 是注入模块级函数 declare 的路径(无拦截,最可疑双点源头)
# 检测 src_sha1 带尾随点 / fd.name 带前导点 / mangled_name 含双点,发现立即终止
if mangled_name is not None and src_sha1 is not None and fd.name is not None:
_vpi_sl: t.CSizeT = string.strlen(src_sha1)
if _vpi_sl >= 17:
stdio.printf("[DDEBUG] VpiReader src_sha1 too long: len=%d sha1='%s' func='%s'\n", _vpi_sl, src_sha1, fd.name)
_ddebug_exit()
_vpi_fn_len: t.CSizeT = string.strlen(fd.name)
if _vpi_fn_len > 0 and fd.name[0] == '.':
stdio.printf("[DDEBUG] VpiReader fd.name starts with dot: name='%s' sha1='%s'\n", fd.name, src_sha1)
_ddebug_exit()
_vpi_mi: int = 0
_vpi_ml: t.CSizeT = string.strlen(mangled_name)
while _vpi_mi < _vpi_ml - 1:
if mangled_name[_vpi_mi] == 46 and mangled_name[_vpi_mi + 1] == 46:
stdio.printf("[DDEBUG] VpiReader mangled double-dot: sha1='%s' func='%s' mangled='%s'\n", src_sha1, fd.name, mangled_name)
_ddebug_exit()
_vpi_mi += 1
# 去重:如果函数已存在则跳过
existing: llvmlite.Function | t.CPtr = HandlesExprCall.find_func_in_module(mod, mangled_name)
if existing is not None:
-48
View File
@@ -4,7 +4,6 @@ import ast
import llvmlite
import memhub
import string
import stdio
import stdlib
import sys
import viperlib
@@ -21,17 +20,6 @@ import lib.core.Handles.HandlesClassDef as HandlesClassDef
import lib.core.StubMerger as StubMerger
# ============================================================
# _ddebug_exit - DDEBUG 拦截退出辅助函数
#
# 刷新 stderr 缓冲区并通过 VLogger 输出可见消息后退出。
# 解决 sys.exit(1) 不刷新缓冲区导致 DDEBUG 消息丢失的问题。
# ============================================================
def _ddebug_exit() -> None:
stdio.fflush(stdio.stderr)
VLogger.error("DDEBUG intercept triggered - check stderr for details")
# ============================================================
# 模块 SHA1 查询(委托给 StubMerger 全局存储器)
#
@@ -144,12 +132,6 @@ def _lookup_mod_sha1(pool: memhub.MemBuddy | t.CPtr,
sha1: str = _lookup_module_sha1(base_mod)
if sha1 is None:
sha1 = _lookup_module_sha1_suffix(base_mod)
# DDEBUG: 检测 _lookup_mod_sha1 返回的 sha1 是否带尾随点(17 字符),发现问题立即终止
if sha1 is not None:
_sl: t.CSizeT = string.strlen(sha1)
if _sl >= 17:
stdio.printf("[DDEBUG] _lookup_mod_sha1 sha1 too long: len=%d sha1='%s' (class='%s' mod='%s')\n", _sl, sha1, class_name, base_mod)
_ddebug_exit()
return sha1
# ============================================================
@@ -4824,7 +4806,6 @@ def translate_call(pool: memhub.MemBuddy | t.CPtr,
"类型 '%s' 已注册但大小为 0(字段链表未填充),立即终止编译",
sz_cls_name)
VLogger.critical(fb_sz1, "__sizeof__")
_ddebug_exit()
# 类型未注册:报错终止,不静默返回 0(会导致 malloc(0)/alloc(0) 堆溢出)
fb_sz2: t.CChar | t.CPtr = VLogger.fmt_buf()
if fb_sz2 is not None:
@@ -4832,7 +4813,6 @@ def translate_call(pool: memhub.MemBuddy | t.CPtr,
"类型 '%s' 未在结构体表中注册,无法计算大小,立即终止编译",
sz_cls_name)
VLogger.critical(fb_sz2, "__sizeof__")
_ddebug_exit()
# 检测 obj.__len__() — 返回 list 对象的 __count__ 字段(偏移 8,i64)
# __len__ 是 list[T] 的内置方法,list 是泛型类不注册 struct
@@ -5571,13 +5551,6 @@ def translate_call(pool: memhub.MemBuddy | t.CPtr,
mangled: str = pool.alloc(mangled_len)
if mangled is not None:
viperlib.snprintf(mangled, mangled_len, "%s.%s", mod_sha1, func_name)
# DDEBUG: 检测连续两个点,发现立即终止
_md_i: int = 0
while _md_i < mangled_len - 1:
if mangled[_md_i] == 46 and mangled[_md_i + 1] == 46:
stdio.printf("[DDEBUG] mod mangled double-dot: sha1='%s' func='%s' mangled='%s'\n", mod_sha1, func_name, mangled)
_ddebug_exit()
_md_i += 1
call_name = mangled
else:
# t 和 c 是内部库,豁免 SHA1 查找:使用裸名调用
@@ -5607,13 +5580,6 @@ def translate_call(pool: memhub.MemBuddy | t.CPtr,
alias_mangled: str = pool.alloc(AliasMangledLen)
if alias_mangled is not None:
viperlib.snprintf(alias_mangled, AliasMangledLen, "%s.%s", alias_sha1, func_name)
# DDEBUG: 检测连续两个点,发现立即终止
_ad_i: int = 0
while _ad_i < AliasMangledLen - 1:
if alias_mangled[_ad_i] == 46 and alias_mangled[_ad_i + 1] == 46:
stdio.printf("[DDEBUG] alias mangled double-dot: sha1='%s' func='%s' mangled='%s'\n", alias_sha1, func_name, alias_mangled)
_ddebug_exit()
_ad_i += 1
call_name = alias_mangled
else:
# 已导入模块但 SHA1 未注册:该模块未被编译,立即报错
@@ -5639,13 +5605,6 @@ def translate_call(pool: memhub.MemBuddy | t.CPtr,
fmangled: str = pool.alloc(fmangled_len)
if fmangled is not None:
viperlib.snprintf(fmangled, fmangled_len, "%s.%s", from_sha1, func_name)
# DDEBUG: 检测连续两个点,发现立即终止
_fd_i: int = 0
while _fd_i < fmangled_len - 1:
if fmangled[_fd_i] == 46 and fmangled[_fd_i + 1] == 46:
stdio.printf("[DDEBUG] from mangled double-dot: sha1='%s' func='%s' mangled='%s'\n", from_sha1, func_name, fmangled)
_ddebug_exit()
_fd_i += 1
call_name = fmangled
else:
err_msg2: t.CChar | t.CPtr = pool.alloc(256)
@@ -5693,13 +5652,6 @@ def translate_call(pool: memhub.MemBuddy | t.CPtr,
bare_mangled: str = pool.alloc(bare_mangled_len)
if bare_mangled is not None:
viperlib.snprintf(bare_mangled, bare_mangled_len, "%s.%s", bare_sha1, bare_func_name)
# DDEBUG: 检测 bare_mangled 中连续两个点(非路径场景),发现立即终止
_bd_i: int = 0
while _bd_i < bare_mangled_len - 1:
if bare_mangled[_bd_i] == 46 and bare_mangled[_bd_i + 1] == 46:
stdio.printf("[DDEBUG] bare_mangled double-dot: sha1='%s' func='%s' mangled='%s'\n", bare_sha1, bare_func_name, bare_mangled)
_ddebug_exit()
_bd_i += 1
call_name = bare_mangled
else:
err_msg3: t.CChar | t.CPtr = pool.alloc(256)
-35
View File
@@ -4,7 +4,6 @@ import ast
import llvmlite
import memhub
import string
import stdio
import viperlib
import lib.core.Handles.HandlesBase as HandlesBase
import lib.core.Handles.HandlesTranslator as HT
@@ -60,15 +59,6 @@ class MatchHandle(HandlesBase.Mixin):
if builder is None or func is None:
return 0
stdio.printf("[MATCHDBG] Handle entry: _renum_class_count=%d\n",
HandlesClassDef._renum_class_count)
dbg_i: int = 0
while dbg_i < HandlesClassDef._renum_class_count:
dbg_nm: str = HandlesClassDef._renum_class_names[dbg_i]
if dbg_nm is not None:
stdio.printf("[MATCHDBG] REnum[%d]=%s\n", dbg_i, dbg_nm)
dbg_i = dbg_i + 1
m_node: ast.Match | t.CPtr = (ast.Match | t.CPtr)(node)
# 1. 求值 subject
@@ -79,11 +69,8 @@ class MatchHandle(HandlesBase.Mixin):
builder, pool, trans.Module, subject_node,
trans._funcs, trans._func_count, trans)
if subject_val is None:
stdio.printf("[MATCHDBG] subject_val is None (translate_value failed)\n")
return 0
stdio.printf("[MATCHDBG] subject_val OK\n")
# 2. 检测是否 REnum match
is_renum: int = 0
renum_name: str = None
@@ -93,23 +80,15 @@ class MatchHandle(HandlesBase.Mixin):
if subject_node.kind() == ast.ASTKind.Name:
nm: ast.Name | t.CPtr = (ast.Name | t.CPtr)(subject_node)
if nm.id is not None:
stdio.printf("[MATCHDBG] subject Name='%s'\n", nm.id)
entry: HandlesVar.VarEntry | t.CPtr = HandlesVar.lookup_var_entry(
trans.SymTab, nm.id)
if entry is None:
stdio.printf("[MATCHDBG] VarEntry None for '%s'\n", nm.id)
if entry is not None and entry.AnnotClassName is not None:
stdio.printf("[MATCHDBG] AnnotClassName='%s'\n",
entry.AnnotClassName)
rn_chk: int = HandlesClassDef._is_renum_class_name(
entry.AnnotClassName)
stdio.printf("[MATCHDBG] _is_renum_class_name=%d\n", rn_chk)
if rn_chk != 0:
is_renum = 1
renum_name = entry.AnnotClassName
subject_ptr = HandlesVar.lookup_var(trans.SymTab, nm.id)
stdio.printf("[MATCHDBG] REnum detected: %s\n",
renum_name)
# 2b. 若未确定,遍历 cases 查 MatchClass 变体
if is_renum == 0:
@@ -136,11 +115,8 @@ class MatchHandle(HandlesBase.Mixin):
ci = ci + 1
# 3. 分派
stdio.printf("[MATCHDBG] dispatch: is_renum=%d\n", is_renum)
if is_renum != 0 and subject_ptr is not None:
stdio.printf("[MATCHDBG] -> _handle_renum_match\n")
return self._handle_renum_match(m_node, renum_name, subject_ptr)
stdio.printf("[MATCHDBG] -> _handle_simple_match\n")
return self._handle_simple_match(m_node, subject_val)
# ============================================================
@@ -289,8 +265,6 @@ class MatchHandle(HandlesBase.Mixin):
renum_sty = renum_se.Ty
if renum_sty is None:
# 找不到结构体类型时无法构造,直接放弃 REnum 路径
stdio.printf("[MATCHDBG] renum struct type not found for '%s'\n",
renum_name)
return 0
i64_ty0: llvmlite.LLVMType | t.CPtr = llvmlite.Int64(pool)
int_val: llvmlite.Value | t.CPtr = subject_ptr
@@ -314,14 +288,11 @@ class MatchHandle(HandlesBase.Mixin):
tag_ptr: llvmlite.Value | t.CPtr = llvmlite.build_bitcast(
builder, subject_ptr, i32_ptr_ty)
if tag_ptr is None:
stdio.printf("[MATCHDBG] tag_ptr None (bitcast failed)\n")
return 0
tag_val: llvmlite.Value | t.CPtr = llvmlite.build_load(
builder, i32_ty, tag_ptr)
if tag_val is None:
stdio.printf("[MATCHDBG] tag_val None (load failed)\n")
return 0
stdio.printf("[MATCHDBG] _handle_renum_match: tag loaded OK\n")
# 2. 创建 default/end BB
cnt: int = trans._label_counter
@@ -381,10 +352,6 @@ class MatchHandle(HandlesBase.Mixin):
if vnm is not None:
tag: int = HandlesClassDef._lookup_renum_variant_in_class(
renum_name, vnm)
stdio.printf("[MATCHDBG] case vnm='%s' renum='%s' -> tag=%d\n",
vnm if vnm is not None else "(null)",
renum_name if renum_name is not None else "(null)",
tag)
if tag >= 0:
tag_buf: t.CChar | t.CPtr = pool.alloc(32)
if tag_buf is not None:
@@ -631,8 +598,6 @@ class MatchHandle(HandlesBase.Mixin):
builder: llvmlite.IRBuilder | t.CPtr = trans._cur_builder
func: llvmlite.Function | t.CPtr = trans._cur_func
stdio.printf("[MATCHDBG] _handle_simple_match entry\n")
# 1. subject 转 i32(若已 i32 直接用,否则 ptrtoint)
i32_ty: llvmlite.LLVMType | t.CPtr = llvmlite.Int32(pool)
subj_bits: int = HandlesExpr.get_llvm_type_bits(subject_val.Ty)
-87
View File
@@ -2,7 +2,6 @@ import t, c
from stdint import *
import memhub
import string
import stdio
import stdlib
import llvmlite
import w32.win32file as win32file
@@ -21,17 +20,6 @@ import lib.StubGen.VpiReader as VpiReader
import lib.Projectrans.Config as Config
# ============================================================
# _ddebug_exit - DDEBUG 拦截退出辅助函数
#
# 刷新 stderr 缓冲区并通过 VLogger 输出可见消息后退出。
# 解决 sys.exit(1) 不刷新缓冲区导致 DDEBUG 消息丢失的问题。
# ============================================================
def _ddebug_exit() -> None:
stdio.fflush(stdio.stderr)
VLogger.error("DDEBUG intercept triggered - check stderr for details")
# ============================================================
# StubMerger - stub 声明合并模块
#
@@ -377,11 +365,6 @@ def PopulateSha1MapStore(scan_result: IncludesScanner.ScanResult | t.CPtr) -> in
global _sha1_store_arr, _sha1_store_mod, _sha1_store_rel, _sha1_store_count
if scan_result is None:
return -1
# [DDEBUG] 诊断:入口输出扫描条目数
fb_ps_in: t.CChar | t.CPtr = VLogger.fmt_buf()
if fb_ps_in is not None:
viperlib.snprintf(fb_ps_in, 1024, "PopulateSha1MapStore 入口: scan_result.Count=%d MAX_INCLUDES=%d", scan_result.Count, MAX_INCLUDES)
VLogger.warning(fb_ps_in, "Reachable")
# 释放旧存储器
if _sha1_store_arr is not None:
stdlib.free(_sha1_store_arr)
@@ -399,59 +382,21 @@ def PopulateSha1MapStore(scan_result: IncludesScanner.ScanResult | t.CPtr) -> in
string.memset(_sha1_store_rel, 0, MAX_INCLUDES * MAX_REL_PATH_LEN)
_sha1_store_count = 0
entry_size_p: t.CSizeT = IncludesScanner.FileEntry.__sizeof__()
# [DDEBUG] 诊断:循环前输出 range 参数和 entry_size
fb_rng: t.CChar | t.CPtr = VLogger.fmt_buf()
if fb_rng is not None:
viperlib.snprintf(fb_rng, 1024, "PopulateSha1MapStore 循环前: scan_result.Count=%d entry_size_p=%d", scan_result.Count, entry_size_p)
VLogger.warning(fb_rng, "Reachable")
for i in range(scan_result.Count):
if i == 0:
# [DDEBUG] 诊断:确认循环体是否执行
fb_lp: t.CChar | t.CPtr = VLogger.fmt_buf()
if fb_lp is not None:
viperlib.snprintf(fb_lp, 1024, "PopulateSha1MapStore 进入循环体 i=0 (Count=%d)", scan_result.Count)
VLogger.warning(fb_lp, "Reachable")
if _sha1_store_count >= MAX_INCLUDES:
# [DDEBUG] 诊断:break 触发
fb_brk: t.CChar | t.CPtr = VLogger.fmt_buf()
if fb_brk is not None:
viperlib.snprintf(fb_brk, 1024, "PopulateSha1MapStore break: _sha1_store_count=%d >= MAX_INCLUDES=%d (i=%d)", _sha1_store_count, MAX_INCLUDES, i)
VLogger.warning(fb_brk, "Reachable")
break
ea: t.CUInt64T = t.CUInt64T(scan_result.Entries) + i * entry_size_p
ent: IncludesScanner.FileEntry | t.CPtr = (IncludesScanner.FileEntry | t.CPtr)(t.CVoid(ea, t.CPtr))
if ent is None or ent.Sha1 is None or ent.RelPath is None:
# [DDEBUG] 诊断:跳过原因
fb_sk: t.CChar | t.CPtr = VLogger.fmt_buf()
if fb_sk is not None:
if ent is None:
viperlib.snprintf(fb_sk, 1024, "PopulateSha1MapStore 跳过[%d]: ent=None", i)
elif ent.Sha1 is None:
viperlib.snprintf(fb_sk, 1024, "PopulateSha1MapStore 跳过[%d]: Sha1=None", i)
else:
viperlib.snprintf(fb_sk, 1024, "PopulateSha1MapStore 跳过[%d]: RelPath=None", i)
VLogger.warning(fb_sk, "Reachable")
continue
# 构建完整路径 includes/{RelPath}(_PathToModuleName 需要)
rp_len: t.CSizeT = string.strlen(ent.RelPath)
full_path_buf: bytes = stdlib.malloc(rp_len + 10)
if full_path_buf is None:
# [DDEBUG] 诊断:malloc 返回 None 判断
if i < 3:
fb_fp: t.CChar | t.CPtr = VLogger.fmt_buf()
if fb_fp is not None:
viperlib.snprintf(fb_fp, 1024, "PopulateSha1MapStore 跳过[%d]: full_path_buf is None (rp_len=%d)", i, rp_len)
VLogger.warning(fb_fp, "Reachable")
continue
viperlib.snprintf(full_path_buf, rp_len + 10, "includes/%s", ent.RelPath)
mod_name: str = _PathToModuleName(full_path_buf)
stdlib.free(full_path_buf)
if mod_name is None:
# [DDEBUG] 诊断:_PathToModuleName 失败
fb_pn: t.CChar | t.CPtr = VLogger.fmt_buf()
if fb_pn is not None:
viperlib.snprintf(fb_pn, 1024, "PopulateSha1MapStore 跳过[%d]: _PathToModuleName 返回 None (RelPath=%s)", i, ent.RelPath)
VLogger.warning(fb_pn, "Reachable")
if mod_name is not None:
idx: t.CSizeT = t.CSizeT(_sha1_store_count) * 17
string.strcpy(_sha1_store_arr + idx, ent.Sha1)
@@ -471,17 +416,6 @@ def PopulateSha1MapStore(scan_result: IncludesScanner.ScanResult | t.CPtr) -> in
string.strncpy(_sha1_store_rel + idx3, ent.RelPath, MAX_REL_PATH_LEN - 1)
_sha1_store_rel[idx3 + MAX_REL_PATH_LEN - 1] = '\0'
_sha1_store_count += 1
# [DDEBUG] 诊断:+= 后的 count(确认是否写入全局)
if i < 3:
fb_inc: t.CChar | t.CPtr = VLogger.fmt_buf()
if fb_inc is not None:
viperlib.snprintf(fb_inc, 1024, "PopulateSha1MapStore 填充[%d]: _sha1_store_count=%d", i, _sha1_store_count)
VLogger.warning(fb_inc, "Reachable")
# [DDEBUG] 诊断:出口输出最终计数
fb_ps_out: t.CChar | t.CPtr = VLogger.fmt_buf()
if fb_ps_out is not None:
viperlib.snprintf(fb_ps_out, 1024, "PopulateSha1MapStore 出口: _sha1_store_count=%d", _sha1_store_count)
VLogger.warning(fb_ps_out, "Reachable")
return _sha1_store_count
@@ -592,11 +526,6 @@ def LookupSha1ByModName(mod_name: str) -> str:
idx_em: t.CSizeT = t.CSizeT(i_em) * 64
if string.strcmp(_sha1_store_mod + idx_em, mod_name) == 0:
sidx_em: t.CSizeT = t.CSizeT(i_em) * 17
# DDEBUG: 检测存储的 sha1 是否带尾随点(长度>=17),发现问题立即终止
_ck_len: t.CSizeT = string.strlen(_sha1_store_arr + sidx_em)
if _ck_len >= 17:
stdio.printf("[DDEBUG] StubMerger sha1 too long: len=%d sha1='%s' mod='%s'\n", _ck_len, _sha1_store_arr + sidx_em, mod_name)
_ddebug_exit()
return _sha1_store_arr + sidx_em
# 第二遍:包名回退("ast" → "ast.__init__")
nm_len_em: t.CSizeT = string.strlen(mod_name)
@@ -1423,21 +1352,6 @@ def _BuildIncludesSha1Map(temp_dir: str, td_len: t.CSizeT,
temp_dir/td_len 参数保留以兼容现有调用者,但不再使用。
数据来源是 PopulateSha1MapStore 填充的全局存储器。
"""
# [DDEBUG] 诊断:入口输出全局存储器状态(区分填充失败/读取失败)
fb_bim: t.CChar | t.CPtr = VLogger.fmt_buf()
if fb_bim is not None:
viperlib.snprintf(fb_bim, 1024, "_BuildIncludesSha1Map 入口: _sha1_store_count=%d", _sha1_store_count)
VLogger.warning(fb_bim, "Reachable")
if _sha1_store_arr is None:
fb_na: t.CChar | t.CPtr = VLogger.fmt_buf()
if fb_na is not None:
viperlib.snprintf(fb_na, 1024, "_BuildIncludesSha1Map: _sha1_store_arr is None")
VLogger.warning(fb_na, "Reachable")
if _sha1_store_mod is None:
fb_nm: t.CChar | t.CPtr = VLogger.fmt_buf()
if fb_nm is not None:
viperlib.snprintf(fb_nm, 1024, "_BuildIncludesSha1Map: _sha1_store_mod is None")
VLogger.warning(fb_nm, "Reachable")
if sha1_list is None or mod_list is None:
return 0
if _sha1_store_arr is None or _sha1_store_mod is None:
@@ -2080,7 +1994,6 @@ def BuildCombinedIR(temp_dir: str, local_sha1: str,
if fb is not None:
viperlib.snprintf(fb, 1024, "依赖模块 '%s' (sha1=%s) 的 stub 文件不存在: %s,立即终止编译", mod_nm, found_s, chk_path)
VLogger.error(fb, "BuildCombinedIR")
_ddebug_exit()
chk_f.close()
stdlib.free(chk_path)
stdlib.free(mod_nm)