分析 MaaAssistantArknights 上游仓库公开 Issue(`https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/...` 或 `#1234`)。自动抓取 issue 正文和评论中的 `report_*.zip` 附件,优先读取 `debug/asst.log`、`debug/gui.log`、`config/gui.json` / `config/gui.new.json`、`cache/resource/tasks.json`,并在有后续分卷时补看 `debug/interface/*.png`、`debug/drops/*.png`、`debug/infrast/**`、`debug/dumps/*` 等现场证据;结合 MAA Core/WPF/资源任务代码与文档判断根因、给出修复方案,供用户让你分析 MAA issue、日志包、ADB 连接失败、关卡导航、识别失败、任务出错、闪退时使用。
https://github.com/MaaAssistantArknights/MaaAssistantArknights。#1234 形式的 issue 编号。report_*.zip,先明确说明证据不足,再尽量基于 issue 文本、截图、代码和文档给出初步判断。#1234 视为 https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/1234MaaAssistantArknights/MaaAssistantArknights,停止并说明此 skill 不适用。-hard、用户现象、复现步骤、维护者或机器人评论。report_*.zip。report_MM-dd_HH-mm-ss 分组,同一时间戳下的 、、 是独立 zip,不是需要先拼接的分卷压缩包。part01part02part03part01,再决定是否看 part02+。part01 一定优先,通常包含:debug/asst.logdebug/asst.bak.logdebug/gui.logdebug/gui.bak.logconfig/*cache/*resource/*_custom.*part02+ 只包含 debug 子目录中最近 3 天修改过的文件,可能是:debug/interface/*.pngdebug/drops/*.pngdebug/infrast/**debug/roguelike/**debug/dumps/*part02+ 可能是空包,也可能只包含图片;不要默认里面一定有文本日志。gui.log 找用户点击、所选关卡、任务链开始、报错时间。asst.log 还原底层行为。gui.log 中的 Start Task Chain、GetFightStage、任务出错 锁定时间窗,再回到 asst.log 里的 taskid、SubTaskError、TaskChainError。gui.log 中的重试流程和 asst.log 中的 adb devices、adb connect、ConnectionInfo 串起来。ConnectConfig 是 PC,改走 AttachWindow / Win32Controller 这条线:gui.log 确认 AttachWindow: Found windowasst.log 里看 Win32Controller::screencap、Win32Controller::clickConnectionInfo.ConnectFailed 的思路分析config/ 与 cache/resource/ 还原用户当时实际运行的配置和资源。src/MaaWpfGui/Res/Localizations/zh-cn.xaml 查中文文案,不要直接把 LocalizationHelper.GetString("Key") 里的 Key、DynamicResource key、TaskChain 名或枚举名当成最终展示文本。debug/asst.logSubTaskError / TaskChainErrordebug/asst.bak.logasst.logdebug/gui.logStart Task Chain。debug/gui.bak.logconfig/gui.json、config/gui.new.json、备份文件config/gui.jsonconfig/gui.new.jsonconfig/gui.json.oldconfig/gui.json.bakStagePlan15-13-hard 之类的硬难度关卡gui.new.json 可能比 gui.json 更接近用户当前界面上的任务配置,不能只看一个文件。gui.new.json 与 gui.log / asst.log 的实际运行状态冲突,继续检查:gui.new.json.bakgui.json.oldgui.json.bakcache/resource/tasks.json 和 cache/resource/tasks/tasks.jsoncache/resource,再用当前仓库代码判断是否已修复。cache/gui/StageActivity.json / StageActivityV2.jsondebug/interface/*.pngasst.log 有 Save image ... debug/interface/...,但上传包没有这张图,要明确说明“日志表明现场图存在,但用户未上传对应分卷”。debug/drops/*.pngdebug/infrast/**、debug/roguelike/**debug/dumps/*MAA.exe.dmp,如果有,也要一起分析。-hardreport_03-15_11-07-05git checkout vXXX)复核旧逻辑gui.log 找这几类高价值信号:正在连接模拟器Already connectedGetFightStageStart Task Chain任务出错连接失败asst.log 找底层证据:ConnectionInfoConnectFailedTaskChainErrorSubTaskErrorto_be_recognizedcur_retrySave imageofflineunauthorizedfailed to connectcannot connectadb.exe devices 里有没有 offlineadb.exe connect 是否报 10061ConnectionInfo.what / whyconfig/gui.json 中的:ConnectConfigConnect.AddressConnect.AllowADBRestartConnect.AllowADBHardRestartConnect.MuMu12Extras.Enabledconfig/gui.json 中 Connect.ConnectConfig == "PC"gui.log 中:连接 PC 端(实验性功能,稳定性无法保证)AttachWindow: Found windowhandle: ..., hwnd: ..., screencapMethod: ..., mouseMethod: ..., keyboardMethod: ...asst.log 中:Win32Controller::screencapWin32Controller::clickconfig/gui.new.json / gui.json 中的 StagePlangui.log 中的 GetFightStageasst.log 中的:Episode15ChapterDifficultyHardEnterChapterDifficultyHardSubTaskErrordebug/interface/*.pngresource/tasks/tasks.json 与 cache/resource/tasks*.jsongui.log 只显示“连接失败”,但 asst.log 里已经给出 adb devices、adb connect、端口轮询和 ConnectionInfo。连接类问题必须以 asst.log 为准。
adb devices 显示目标地址 offline,随后 MuMu 备选端口都 10061,通常更像模拟器 / ADB 状态异常,或自动探测到的端口不可达,而不是任务逻辑问题。
gui.log 显示选中的关卡是 15-13-hard 一类 hard 代码,而 asst.log 长时间卡在 ChapterDifficultyHard,OCR 却反复识别到和按钮无关的文字,通常说明当前画面没有进入预期的难度切换界面。
asst.log 明确写了 Save image 到 debug/interface/*.png 或 debug/drops/*.png,但上传包没有相应分卷时,要把“缺失的现场证据”单独写出来。
part02 可以是空包,也可以只包含图片;不要因为没有文本日志就把它判成“无用分卷”。
issue 机器人评论“日志没有上传成功”时,不要自动当真;先验证正文附件是否仍可下载。
如果 gui.log 说“任务出错”,但对应 taskid 的 asst.log 实际 AllTasksCompleted,要明确写“本次日志未复现用户描述的问题”。
用户日志里的任务流程与当前主线代码明显不一致,且当前代码看起来已经修掉了该问题:
git checkout vXXX)核对旧逻辑。gui.new.json、gui.json 和实际日志不一致时,不要急着判“用户配置写错了”;先看 gui.new.json.bak 和 gui.json.old,尤其是用户复现后又改回开关的场景。
在 ConnectConfig=PC 的 issue 里,Win32Controller::click 正常返回不代表点击真的生效;要看点击后的下一帧中,按钮状态、数量 OCR、场景识别有没有变化。
gui.log 中“已使用 48 小时内过期的理智药”这类高层提示,不一定等价于底层逐药 OCR 结论;如果 asst.log 明确识别到 9天、NotExpiring 等相反证据,应优先相信 asst.log。
src/MaaWpfGui/ViewModels/UserControl/Settings/IssueReportUserControlModel.cssrc/MaaWpfGui/Main/Bootstrapper.cssrc/MaaCore/Utils/Logger.hppsrc/MaaUtils/include/MaaUtils/Logger.hsrc/MaaWpfGui/Main/AsstProxy.cssrc/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cssrc/MaaWpfGui/ViewModels/UserControl/Settings/ConnectSettingsUserControlModel.cssrc/MaaCore/Controller/MinitouchController.cppdocs/zh-cn/protocol/callback-schema.mddocs/zh-cn/manual/device/android.mdsrc/MaaWpfGui/ViewModels/UserControl/Settings/ConnectSettingsUserControlModel.cssrc/MaaWpfGui/Main/AsstProxy.csresource/tasks/tasks.jsonsrc/MaaWpfGui/ViewModels/UserControl/TaskQueue/FightSettingsUserControlModel.cssrc/MaaWpfGui/Models/AsstTasks/AsstFightTask.cssrc/MaaCore/Task/Interface/FightTask.cppsrc/MaaCore/Task/Fight/MedicineCounterTaskPlugin.cppresource/tasks/tasks.jsonsrc/MaaCore/Utils/DebugImageHelper.hppsrc/MaaWpfGui/Res/Localizations/zh-cn.xamlsrc/MaaWpfGui/Res/Localizations/zh-cn.xaml 中的中文文案。src/MaaWpfGui/ViewModels/UI/TaskQueueViewModel.cs 中 LocalizationHelper.GetString(taskType.ToString()) 的 key,再到 src/MaaWpfGui/Res/Localizations/zh-cn.xaml 查 StartUp、Fight、Infrast、Recruit、Mall、Award、Roguelike、Reclamation、Custom。StartTask、CompleteTask、TaskError、ConnectFailed、TryToReconnect 等 key。*.xaml / *.cs 里找 DynamicResource SomeKey 或 LocalizationHelper.GetString("SomeKey"),再到 src/MaaWpfGui/Res/Localizations/zh-cn.xaml 查中文。Issue、GenerateSupportPayload、OpenDebugFolder 等 key。config/gui*.json 里任务有用户自定义 Name,输出时优先保留用户自定义名称;必要时再括号补默认任务类型中文,例如 刷理智(理智作战 / Fight)。taskChain / 枚举名,例如 基建换班(Infrast)。src/MaaWpfGui/Res/Localizations/zh-cn.xaml 没有对应 key,再退回原始 key 或代码里的英文字符串,并明确说明“未在 src/MaaWpfGui/Res/Localizations/zh-cn.xaml 找到对应文案”。blob 行号链接,用尖括号包裹。https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/<commit>/<path>#L14-L20<commit> 必须是本次分析实际依据的代码版本:
HEAD如果 issue 像 #16014 一样是 MuMu ADB 连接随机失败,并且同时出现:
config/gui.json 里 ConnectConfig 是 MuMuEmulator12127.0.0.1:16384gui.log 在复现时段从 16384 轮询到 16576asst.log 里 adb devices 返回 127.0.0.1:16384 offlineasst.log 里对备选端口出现 cannot connect ... (10061)ConnectionInfo.what 是 ConnectFailed那么根因更可能是 ADB / 模拟器连接层异常,而不是 GUI 任务队列逻辑;此时应结合 MuMu 默认端口表和 Android offline 文档给出建议。
如果 issue 像 #16002 一样是 15/16 章 hard 难度切换失败,并且同时出现:
config/gui.new.json 或 gui.log 里关卡是 15-13-hardasst.log 里先进入 Episode15ChapterDifficultyHard推演计分 等无关文本SubTaskError,并保存 debug/interface/*.pngresource/tasks/tasks.json 里 EnterChapterDifficultyHard 期望在固定 ROI 识别到 进入作战那么根因更可能是当前画面没有进入预期的难度切换界面,或按钮没有出现在资源定义的期望区域,而不是“Hard 后缀本身没有传到 core”。
最终回答用这个结构:
## Issue 概要
- issue:`#1234`
- 版本 / 资源时间:
- 模拟器 / 连接配置 / 任务:优先写 `zh-cn` 中文任务名;如果日志里是用户自定义任务名,先写自定义名,再补默认任务类型中文 / key
- 相关设置项 / 关键提示文案:优先写 `src/MaaWpfGui/Res/Localizations/zh-cn.xaml` 中的中文文案
- 用户现象:
## 关键证据
<details><summary>点击此处展开</summary>
- `debug/gui.log`:
- `debug/asst.log`:
- `config/gui.json` / `config/gui.new.json`:
- `cache/resource` / `cache/gui`:
- `debug/interface` / `debug/drops`:
- 代码依据:如需指向具体实现,直接附远端 GitHub 行号链接
</details>
## 根因判断
- 直接结论:
- 证据链:
## 给用户的建议
- 用户现在可以直接尝试的动作:
- 是否建议升级 / 重下完整包 / 同步资源 / 重置配置:
- 是否需要等待开发者修复:
- 是否有临时绕过方案:
## 修复方案
1. 代码 / 资源 / 配置层修复
2. 需要补充的日志或截图
3. 需要补充的测试
## 给修复 AI 的建议(可复制)
<details><summary>点击此处展开</summary>
~~~text
现象:
[一句话描述用户可见的问题]
关键证据:
[粘贴原始日志、堆栈、监控截图中的关键文本]
可能相关线索(待验证):
[根据日志/现象推测的可能方向,不保证准确,供参考]
~~~
</details>
## 置信度
- 高 / 中 / 低
- 还缺什么证据
## English translation
<details><summary>Click here to expand</summary>
Translate the complete conclusion directly into English and paste it here. Note that the English text is in `src/MaaWpfGui/Res/Localizations/en-us.xaml`.
</details>
gui.log 下结论。cache/resource。src/MaaWpfGui/Res/Localizations/zh-cn.xaml 的中文文案;必要时才在括号里补原始 key / taskChain / 枚举名。blob 行号链接,用尖括号包裹,不要给本地路径加行号。