# Debug Session: phase1-scan-crash 状态: [OPEN] ## 症状 - TPV(asan 构建,9:27 重建,含 50bd1f5/b1d4d3a)编译项目时,Phase1 includes 扫描完成 (`扫描: _dict/_fakeduck/_list/_variant/_withcontent.vp` 等最后输出)后崩溃 - 崩溃无 ASAN 堆栈(exe 确认插桩 22611 处、链接 asan 库正常) - H1(CTypedef 垃圾串)与 M3(builtins 1 字节越界)修复后依然崩溃 ## 时间线 - 08:50 asan 构建(含 BuildCombinedIR 并行) - 09:14 50bd1f5 CTypedef 垃圾串修复 - 09:23 b1d4d3a M3 越界修复 - 09:27 重建 exe(含两修复)→ 仍崩 ## 假设(可证伪) - A. M6 泛型跨遍悬空:`_list[T]`/`_dict` 泛型模板预注册/特化时节点字段引用主池, 被 mark/reset 回收后读悬空 → 池内访问 ASAN 不报 - B. H2/H3 1MB IR 截断:新文件(_dict/_list 泛型特化)stub.ll/text.ll 超 1MB PHASE1_IR_SIZE 被静默截断 → 合并畸形 → 崩溃 - C. M4 vpi 返回注解缓存 realloc 后旧指针悬空 → strcmp/strlen 读野(跨模块首次缓存窗口) - D. Phase1 哨兵检查 / VLogger.error → exit(1) 无 ASAN(需确认崩溃前是否有 ERROR 输出) - E. 固定宽槽 strcpy 越界:PopulateSha1MapStore 的 MAX_REL_PATH_LEN/MAX_DEPS_STR_LEN 等固定宽槽 + 新文件长路径/长依赖 → 越界写(池内无 ASAN) ## 插桩点(一次覆盖全部假设) 1. Phase1Main 1a-pre 循环:`[DBG-P1] 1a-pre: {rel_path}`(每文件,L147) 2. Phase1Main 1b 翻译前:`[DBG-P1] 1b 翻译: {file_path}`(L825) 3. Phase1Main stub dump 后:`[DBG-P1] stub_len={n} {file_path}`(L880) 4. Phase1Main text dump 后:`[DBG-P1] text_len={n} {file_path}`(L911) 5. StubMergerStore.PopulateSha1MapStore:`[DBG-P1] store_count={n} scan_count={n}`(L135) ## 插桩提交 - b133342 debug(phase1): 插桩 1a-pre/1b 翻译/stub 长度,定位扫描后无 ASAN 崩溃点 - 待用户重建(--clean --rebuild-includes --clear-cache --asan)复现,贴崩溃前最后 50 行 ## 结论 (待用户重建复现后填写)