百度地图用Agent串联崩溃日志分析与源码修复
概述
百度地图团队把原 App 稳定性排查链路(日志收集→符号化→堆栈分析→代码定位→上下文还原→根因判断→修复验证,平均耗时数小时至数天、重度依赖专家经验)改造为统一 Agent 自动完成「证据采集→推理分析→结论输出」:Tool 层实现 crash_log_parser(日志解析)、add2line_resolver(addr2line/atos 地址符号化)、code_content_provider(代码上下文与崩溃图谱提取),Workflow 层面向问题类型编排(BaseCrashAnalysisWorkflow → GenericCrashAnalyzeWorkflow / iOSCrashAnalyzeWorkflow / AndroidCrashAnalyzeWorkflow),每步输入输出均为结构化 JSON。 入口采用多壳架构,当前优先打磨 CLI(无环境依赖、可脚本化接入 CI/CD、每步产出独立 JSON 便于调试),Daemon(SSE 流式)、Python API、VSCode Plugin 基于同一 Core 构建。RAG 层由 SQLite 规则库(精确匹配)、ChromaDB 向量库(语义相似检索 Patterns)、SQLite 元数据层(证据/策略/指导块)三层构成,每次分析沉淀崩溃特征、调用链片段、修复策略与采纳/拒绝反馈,配合衰减与 GC 治理形成「越用越聪明」的数据飞轮,与一次性问答工具形成差异。 推理支持 Direct / LangChain / LangGraph 三种引擎,Step 6 可把 AI 生成的修复方案做函数级精确替换写回源文件(自动备份到 cli_reports/<timestamp>/original_sources/,Git 仓库下可直接生成 Patch)。工程难点上,源码定位用七级递进策略把 addr2line 返回的 CI 编译绝对路径映射到本地目录(直接命中→工程根目录名锚点→尾部路径逐级拼接→父目录+文件名 glob→预建索引→受限 Fallback,多候选按路径相似度评分并引入动态超时预算),函数体提取以 tree-sitter AST 为主、正则为回退(--code-parser-backend 切换),高级依赖均可选导入、缺失自动回退。 项目在根目录 examples/crash_cases 内置 demo_basic(11 种典型崩溃:空指针、悬垂指针、数组越界、除零、错误类型转换、栈溢出、主动 abort、SIGBUS、SIGILL、double free、空函数指针调用)与 demo_multithread 样例。以空指针 SIGSEGV 为例,Agent 把崩溃地址 0x100546ffc 符号化为 my_lib.cpp:187、提取上下文后加入空指针判空并 return,修复前源码自动备份。 项目已在团队内部推广使用,持续沉淀历史崩溃模式与排查经验,帮助缩短 Crash 排查时间、降低新人上手门槛(正文未给出量化指标)。