Skip to main content

dmp-analysis

分析 Windows 崩溃转储文件(.dmp),诊断 MaaFramework / MXU 项目及其依赖项的崩溃。用于 issue 日志包或附件中发现 .dmp 文件,或用户要求分析 DMP / 崩溃转储时。

インストールへ移動

ソース情報

リポジトリ
1204244136/MDA
ソースの最終更新活動
2026年5月28日 22:01
検出された SKILL.md の言語
中国語
スター
114
フォーク
32

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
dmp-analysis
description
分析 Windows 崩溃转储文件(.dmp),诊断 MaaFramework / MXU 项目及其依赖项的崩溃。用于 issue 日志包或附件中发现 .dmp 文件,或用户要求分析 DMP / 崩溃转储时。
# Windows DMP Analysis for MaaFramework / MXU Projects ## Scope - Windows minidump (`.dmp`) files from MaaFramework / MXU based projects. - 崩溃通常可能来自 MaaFramework C++ 运行时、MXU Rust/Tauri 层、控制器模块、第三方视觉/推理依赖,或项目自身扩展。 - 默认覆盖 x86_64;aarch64 需要替换对应下载包架构。 ## Prerequisites 需要 `minidump-stackwalk` 和 `dump_syms`。 检查: ```powershell Get-Command minidump-stackwalk Get-Command dump_syms ``` 若本地缺失,按当前项目 CI / workflow / 文档安装;不要在未经用户同意时擅自安装全局工具。 ## Workflow ### 1. 获取 DMP 将 `.dmp` 放到临时分析目录,例如: ```text .cache/dmp-analysis/issue-<number>/ .cache/dmp-analysis/local-<timestamp>/ ``` 来源可能是: - issue 附件中的 `.dmp`。 - 日志包内部的 `.dmp`。 - 用户本地提供的崩溃转储文件。 ### 2. 无符号快速分析 ```powershell minidump-stackwalk "<path-to-dmp>" ``` 先获取: - OS 信息。 - 异常类型和异常码。 - 崩溃线程。 - 模块列表。 - 崩溃地址和模块偏移。 根据异常地址或 crashing thread 顶部帧识别疑似崩溃模块。 ### 3. 与日志关联 DMP 文件名常包含崩溃进程 PID,例如: ```text Project.exe.18188.dmp → PID 18188 ``` 用该 PID 与日志交叉验证: - `maafw.log` 中的 `[Px18188]`。 - `mxu-tauri.log` 中的实例 / agent / 进程生命周期。 - `go-service.log` 或 agent stdout/stderr 中的启动信息。 确认 DMP 对应的运行会话,避免把不同时间的日志混在一起。 ### 4. 确定关键版本 DMP 模块版本字段可能为空,优先从日志和配置获取: | 优先级 | 来源 | 线索 | | ------ | ---------------- | --------------------------------------------- | | 1 | `mxu-tauri.log` | MXU / MaaFramework 初始化版本 | | 2 | `go-service.log` | PI environment / client version | | 3 | config 文件 | `interface.json`、`maa_option.json`、项目配置 | | 4 | issue 正文 | 用户报告版本 | | 5 | DMP 模块列表 | 模块 version 字段,可能为 `?` | 记录: - MaaFramework version。 - MXU version。 - 项目自身版本。 - 控制器类型(Win32 / ADB / 其他)。 ### 5. 下载 PDB 符号 #### MaaFramework ```powershell $MaaVersion = "<version>" $Work = "<analysis-dir>" Invoke-WebRequest "https://github.com/MaaXYZ/MaaFramework/releases/download/v$MaaVersion/MAA-win-x86_64-v$MaaVersion.zip" -OutFile "$Work\maa-fw.zip" Expand-Archive "$Work\maa-fw.zip" "$Work\maa-fw" -Force ``` 常见 PDB: | PDB | 模块 | | ------------------------- | ----------------------- | | `MaaFramework.pdb` | MaaFramework.dll | | `MaaUtils.pdb` | MaaUtils.dll | | `MaaToolkit.pdb` | MaaToolkit.dll | | `MaaWin32ControlUnit.pdb` | MaaWin32ControlUnit.dll | | `MaaAdbControlUnit.pdb` | MaaAdbControlUnit.dll | | `MaaAgentServer.pdb` | MaaAgentServer.dll | | `MaaAgentClient.pdb` | MaaAgentClient.dll | #### MXU ```powershell $MxuVersion = "<version>" Invoke-WebRequest "https://github.com/MistEO/MXU/releases/download/v$MxuVersion/MXU-win-x86_64-v$MxuVersion.zip" -OutFile "$Work\mxu.zip" Expand-Archive "$Work\mxu.zip" "$Work\mxu" -Force ``` `mxu.pdb` 通常位于压缩包根目录。 ### 6. PDB 转 Breakpad `.sym` ```powershell $PdbDir = "$Work\pdb" $Symbols = "$Work\symbols" New-Item -ItemType Directory -Force $Symbols | Out-Null Get-ChildItem $PdbDir -Filter *.pdb | ForEach-Object { $name = $_.BaseName $header = & dump_syms $_.FullName 2>$null | Select-Object -First 1 $debugId = ($header -split '\s+')[3] $dest = Join-Path $Symbols "$name.pdb\$debugId" New-Item -ItemType Directory -Force $dest | Out-Null & dump_syms $_.FullName > (Join-Path $dest "$name.sym") } ``` ### 7. 符号化 stackwalk ```powershell minidump-stackwalk "<path-to-dmp>" "$Work\symbols" ``` 输出应包含函数名、源码路径和行号。如果符号化失败,报告原因并保留 module+offset 堆栈。 ### 8. 分析重点 #### 异常类型 - `EXCEPTION_ACCESS_VIOLATION` (`0xC0000005`):空指针、悬垂指针、use-after-free。 - `EXCEPTION_STACK_OVERFLOW` (`0xC00000FD`):无限递归或栈对象过大。 - `EXCEPTION_ILLEGAL_INSTRUCTION` (`0xC000001D`):CPU 指令集、二进制损坏或错误模块。 - `STATUS_STACK_BUFFER_OVERRUN` (`0xC0000409`):Windows fast-fail,不一定是真缓冲区溢出。 - 参数 `0x7` 常见于 `std::terminate()` / `abort()`,可能是未捕获 C++ 异常。 - 需要看调用者帧,而不是只归因到 `ucrtbase.dll`。 - `EXCEPTION_BREAKPOINT` (`0x80000003`):断点、assert、panic 或主动触发崩溃。 #### 模块归属 - `Maa*.dll`:MaaFramework 运行时或控制器。 - `mxu.exe`:MXU/Tauri/Rust 层。 - `onnxruntime_*.dll`、`opencv_*`、OCR/推理库:第三方依赖。 - `DirectML.dll`、显卡驱动相关模块:图形/推理运行时。 - `ntdll.dll`、`KERNELBASE.dll`、`ucrtbase.dll`:通常要看上层调用者。 ### 9. 关联源码 如果符号化帧涉及 MaaFramework 或 MXU,并能确定版本,按需 clone 对应 tag 到临时目录: ```powershell git clone --depth 1 --branch "v<VERSION>" "https://github.com/MaaXYZ/MaaFramework.git" ".cache\upstream-src\MaaFramework" git clone --depth 1 --branch "v<VERSION>" "https://github.com/MistEO/MXU.git" ".cache\upstream-src\MXU" ``` 定位到具体源码行后,在报告中给出远端 GitHub blob 链接。 ## 输出格式 ````markdown ## DMP 分析结果 - DMP 文件:`<filename>` - 操作系统:`<OS version>` - 异常类型:`<EXCEPTION_*>` (`<hex>`) - 崩溃模块:`<module>+<offset>` - 符号化状态:已符号化 / 仅 module+offset ## 崩溃堆栈(crashing thread) ```text Frame 0: ... Frame 1: ... ``` ## 关键模块版本 | Module | Version | | ------------------ | ------- | | MaaFramework.dll | ... | | mxu.exe | ... | | Project executable | ... | ## 根因判断 - 崩溃归属:MaaFramework / MXU / 项目扩展 / 第三方依赖 / 未知 - 分析:... - 置信度:高 / 中 / 低 ## 建议 - 用户可尝试:... - 开发者修复方向:... - 还缺的证据:... ```` ## Cleanup 分析完成后可删除临时目录;删除前确认没有用户需要保留的附件或中间产物。
GitHubで見る