From 1f03fc197752c9c6a1808bda5f7b0c6973c36a88 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Mon, 19 Oct 2026 18:19:31 +0800 Subject: [PATCH] =?UTF-8?q?fix(traceback):=20=E9=80=9A=E8=BF=87=20.vpi=20?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E5=AE=9A=E4=BD=8D=20traceback=20=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=20SHA1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sig_files/source_module_sig_files 的值是 .vpi 路径,basename 不含 traceback;改为读取前 512 字节匹配 'Module: traceback'。 --- lib/Projectrans/Phase2Translator.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/Projectrans/Phase2Translator.py b/lib/Projectrans/Phase2Translator.py index 6b12c7c..9828d35 100644 --- a/lib/Projectrans/Phase2Translator.py +++ b/lib/Projectrans/Phase2Translator.py @@ -2358,13 +2358,21 @@ class Phase2Translator: # 直接调用它(不依赖 .ctors/.init_array,避免 MinGW 下 .ctors.65534 不执行)。 if self.traceback_enabled: _tb_sha1: str | None = None - for _src_map in (getattr(self, '_shared_source_module_sig_files', {}), self.sig_files): - for _k, _p in _src_map.items(): + for _k, _p in self.sig_files.items(): + try: if 'traceback' in os.path.basename(_p): _tb_sha1 = _k break - if _tb_sha1: - break + if 'Module: traceback' in _ReadTextCached(_p)[:512]: + _tb_sha1 = _k + break + except Exception: + continue + if _tb_sha1 is None: + for _k, _p in getattr(self, '_shared_source_module_sig_files', {}).items(): + if 'traceback' in str(_p): + _tb_sha1 = _k + break if _tb_sha1 is not None: trans.translator.TracebackInstallSymbol = f'{_tb_sha1}.Install' trans.SliceLevel = self.slice_level