mcpField
D
dotnet-debugging

dotnet-debugging

github.com/novotnyllc开发234155 次安装2 周前更新
代码仓库

关于 dotnet-debugging

用于排查 Windows、Linux 和 macOS 上 .NET、原生及混合模式应用问题的调试 Skill。它提供转储文件、实时进程、崩溃、挂起、CPU 占用、内存问题及容器诊断的结构化流程。

主要功能

  1. 01崩溃转储与实时进程工作流
  2. 02崩溃、挂起和死锁排查
  3. 03高 CPU 与内存问题调查
  4. 04Windows、Linux 和 macOS 指南
  5. 05Docker 与 Kubernetes 诊断
  6. 06包含堆栈证据的结构化报告

适用场景

  1. 01查找 .NET 应用崩溃或挂起原因
  2. 02排查死锁和 CPU 占用过高
  3. 03追踪内存压力或疑似泄漏
  4. 04诊断容器中的应用问题

MCP 相关

该 Skill 提供 WinDbg MCP 服务的配置和访问说明,并使用其工具打开远程调试会话或转储文件、执行调试器命令及关闭会话。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/novotnyllc/dotnet-artisan --skill dotnet-debugging

安装后在 Claude Code 中输入/dotnet-debugging确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
references/
access-mcp.md
capture-playbooks.md
common-patterns.md
dump-workflow.md
linux-debugging.md
live-attach.md
mcp-setup.md
report-template.md
sanity-check.md
scenario-command-packs.md
symbols.md
task-crash.md
task-hang.md
task-high-cpu.md
task-kernel.md
task-memory.md
task-unknown.md

详细介绍

dotnet-debugging

概述

使用 WinDbg MCP 工具(Windows)、dotnet-dump 和配合 SOS 的 lldb(Linux/macOS)进行 Windows 和 Linux/macOS 调试。适用于任何应用程序——本机应用程序、托管应用程序(.NET/CLR)或混合模式应用程序。包含 Docker 和 Kubernetes 容器诊断模式。通过结构化命令包和报告模板,指导排查崩溃转储、应用程序挂起、高 CPU 占用和内存压力问题。

**平台:**Windows(WinDbg MCP、cdb)、Linux/macOS(dotnet-dump、配合 SOS 的 lldb、createdump、dotnet-monitor)。

路由表

主题关键词说明配套文件
MCP 设置MCP server、WinDbg、configurationMCP 服务配置references/mcp-setup.md
MCP 访问MCP access、tool IDs、dispatchMCP 访问模式references/access-mcp.md
常见模式debug patterns、SOS、CLR常见调试模式references/common-patterns.md
转储工作流dump file、.dmp、crash dump转储文件分析工作流references/dump-workflow.md
实时附加live process、cdb、attach实时进程附加指南references/live-attach.md
符号symbol server、.symfix、PDB符号配置references/symbols.md
基本检查verify、environment、baseline基本检查流程references/sanity-check.md
场景命令包command pack、triage、workflow场景命令包references/scenario-command-packs.md
捕获操作手册capture、procdump、triggers捕获操作手册references/capture-playbooks.md
报告模板diagnostic report、evidence诊断报告模板references/report-template.md
崩溃分诊crash、exception、access violation崩溃分诊references/task-crash.md
挂起分诊hang、deadlock、freeze挂起分诊references/task-hang.md
高 CPU 占用分诊high CPU、runaway thread、spin高 CPU 占用分诊references/task-high-cpu.md
内存分诊memory leak、heap、LOH内存泄漏分诊references/task-memory.md
内核调试kernel、BSOD、bugcheck内核调试references/task-kernel.md
未知问题分诊unknown issue、general triage未知问题分诊references/task-unknown.md
Linux 调试dotnet-dump、lldb、createdump、containerLinux/macOS 调试、dotnet-dump、lldb SOS、容器references/linux-debugging.md

范围

  • 在 Windows、Linux 和 macOS 上分析崩溃转储(.dmp 文件)
  • 实时进程附加(Windows 上使用 cdb,Linux/macOS 上使用 lldb)
  • 挂起和死锁诊断(线程分析、锁检测、等待链)
  • 高 CPU 占用分诊(识别失控线程)
  • 内存压力和泄漏排查(托管堆、本机堆)
  • 内核转储分诊(BSOD / bugcheck 分析,Windows)
  • 容器诊断(在 Docker/Kubernetes 中使用 dotnet-dump、sidecar 模式)
  • 生产环境诊断(dotnet-monitor REST API、基于触发器的采集)
  • 跨平台 SOS 命令(WinDbg、dotnet-dump、lldb)
  • 包含堆栈证据的结构化诊断报告
与 dotnet-tooling 的边界

这两项技能使用了部分相同的工具(dotnet-dump、dotnet-counters、dotnet-trace),但用途不同:

场景使用此技能(调试)使用 dotnet-tooling
调查崩溃转储(.dmp)是否
“我的应用为什么崩溃/挂起/内存不足?”是否
将调试器附加到正在运行的进程是否
“如何分析应用的性能?”否是(性能分析)
“如何降低 GC 压力?”否是(gc-memory)
收集转储以供后续分析是否
运行 dotnet-counters 监控指标否是(性能分析)
使用 dotnet-dump 分析转储是否
反编译程序集以了解其行为否是(ilspy-decompile)

一般来说:如果出了故障(崩溃、挂起、死锁、内存不足),请使用此技能。如果运行缓慢或需要优化,请使用 dotnet-tooling。

不在范围内

  • 性能分析(使用 dotnet-counters、dotnet-trace 进行优化)→ dotnet-tooling
  • GC 调优和托管内存优化 → dotnet-tooling
  • 程序集反编译(ILSpy)→ dotnet-tooling
  • 性能基准测试和回归检测 → dotnet-testing
  • 应用级日志记录和可观测性 → dotnet-devops
  • 单元测试/集成测试调试 → dotnet-testing

MCP 工具契约

这些工具 ID 是 WinDbg MCP 服务导出的名称(单下划线 mcp_...),不是某些宿主使用的 mcp__... 调度前缀。

操作用途
mcp_mcp-windbg_open_windbg_remote附加到正在运行的调试服务
mcp_mcp-windbg_open_windbg_dump打开已保存的转储文件
mcp_mcp-windbg_run_windbg_cmd执行调试器命令
mcp_mcp-windbg_close_windbg_remote与正在运行的会话断开连接
mcp_mcp-windbg_close_windbg_dump关闭转储会话

诊断工作流

前置步骤:符号

开始分析前,请配置符号,以获取有意义的堆栈信息:

  1. 设置 Microsoft 符号服务器:.symfix(将 srv* 设置为 Microsoft 公共符号)
  2. 添加应用符号:.sympath+ C:\path\to\your\pdbs
  3. 重新加载模块:.reload /f
  4. 验证:lm(列出模块,检查状态是“deferred”还是“loaded”)

如果符号不正确,堆栈中显示的将是原始地址,而不是函数名称。

崩溃转储分析
  1. 打开转储:使用转储文件路径调用 mcp_mcp-windbg_open_windbg_dump
  2. 加载托管代码的 SOS:.loadby sos clr(Framework)或 .loadby sos coreclr(.NET Core)
  3. 获取异常上下文:!pe(打印异常)、!analyze -v(自动分析)
  4. 检查线程:~*e !clrstack(所有托管堆栈)、!threads(线程列表)
  5. 检查托管堆:!dumpheap -stat(堆摘要)、!gcroot <addr>(对象根)
挂起/死锁诊断
  1. 附加到进程或打开转储,然后加载 SOS
  2. 列出所有线程:!threads,使用 !syncblk(同步块表)找出正在等待的线程
  3. 检测死锁:!dlk(SOS 死锁检测)
  4. 检查线程堆栈:对特定线程 N 使用 ~Ns !clrstack
  5. 检查等待原因:使用 !waitchain 检查 COM/RPC 链,使用 !mda 获取 MDA 诊断信息
高 CPU 占用初步排查
  1. 附加到正在运行的进程,或间隔 10-30 秒收集多个转储
  2. 使用 !runaway 找出占用 CPU 时间最多的线程
  3. 检查热点线程堆栈:~Ns kb(原生堆栈)、~Ns !clrstack(托管堆栈)
  4. 查找紧密循环、被阻塞的终结器线程或过度 GC
内存压力调查
  1. 打开转储并加载 SOS
  2. 托管堆:!dumpheap -stat(类型统计)、!dumpheap -type <TypeName>(筛选)
  3. 查找泄漏对象:!gcroot <address>(追踪 GC 根,找到固定引用或静态引用)
  4. 原生堆:!heap -s(堆摘要)、!heap -l(泄漏检测)
  5. LOH 碎片:!eeheap -gc(GC 堆段)

报告模板

## Diagnostic Report

**Symptom:** [crash/hang/high-cpu/memory-leak]
**Process:** [name, PID, bitness]
**Dump type:** [full/mini/live-attach]

### Evidence
- Exception: [type and message, or N/A]
- Faulting thread: [ID, managed/native, stack summary]
- Key stacks: [condensed callstack with module!function]

### Root Cause
[Concise analysis backed by stack/heap evidence]

### Recommendations
[Numbered action items]

防护原则

  • 如果没有被调用方一侧的证据,不要声称确定无疑。
  • 除非锁/等待证据足以支持,否则不要称之为死锁。
  • 保护用户隐私:报告中不要包含环境块里的机密信息。

交叉引用:dotnet-tooling,用于 .NET SDK 诊断工具(references/profiling.md)以及 GC/内存调优(references/gc-memory.md)。

参考资料

评论

支持 Markdown