diff --git a/lib/Projectrans/Phase2Translator.py b/lib/Projectrans/Phase2Translator.py index 2d02c93..9793648 100644 --- a/lib/Projectrans/Phase2Translator.py +++ b/lib/Projectrans/Phase2Translator.py @@ -2373,11 +2373,14 @@ class Phase2Translator: if 'traceback' in str(_p): _tb_sha1 = _k break + trans.translator.TracebackEnabled = self.traceback_enabled if _tb_sha1 is not None: trans.translator.TracebackInstallSymbol = f'{_tb_sha1}.Install' - _vlog().info( - f"[traceback] InstallSymbol={getattr(trans.translator, 'TracebackInstallSymbol', None)}" - f" file={os.path.basename(src_path)}") + sys.stderr.write( + f"[traceback] file={os.path.basename(src_path)} " + f"enabled={self.traceback_enabled} " + f"InstallSymbol={getattr(trans.translator, 'TracebackInstallSymbol', None)}\n") + sys.stderr.flush() trans.SliceLevel = self.slice_level trans.translator.SliceLevel = self.slice_level trans.translator.SliceCount = 0 diff --git a/lib/core/Handles/HandlesFunctions.py b/lib/core/Handles/HandlesFunctions.py index 5251e04..2ca5a56 100644 --- a/lib/core/Handles/HandlesFunctions.py +++ b/lib/core/Handles/HandlesFunctions.py @@ -2054,12 +2054,16 @@ class FunctionHandle(BaseHandle): func_body = func_body[1:] else: Gen._create_doc_global(doc_symbol, None) - if Node.name == 'main': + if Node.name == 'main' and getattr(self.Trans, 'TracebackEnabled', False): _tb_install: str | None = getattr(self.Trans, 'TracebackInstallSymbol', None) if not _tb_install: _tb_sha1 = getattr(Gen, 'ModuleSha1Map', {}).get('traceback') if _tb_sha1: _tb_install = f'{_tb_sha1}.Install' + if not _tb_install: + raise RuntimeError( + '--traceback: main 入口无法解析 traceback.Install 符号' + '(TracebackInstallSymbol 未设置且 ModuleSha1Map 无 traceback)') if _tb_install: _install_fn = Gen._CreateOrReuseFuncDecl( _tb_install, ir.FunctionType(ir.IntType(32), []))