From dotnet-artisan
Debugs Windows and Linux/macOS applications (native, .NET/CLR, mixed-mode) using WinDbg MCP, dotnet-dump, lldb with SOS, and container diagnostics. Covers crash dumps, hangs, high CPU, memory leaks, and kernel debugging.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dotnet-artisan:dotnet-debuggingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Windows and Linux/macOS debugging using WinDbg MCP tools (Windows), dotnet-dump, and lldb with SOS (Linux/macOS). Applicable to any application -- native, managed (.NET/CLR), or mixed-mode. Includes container diagnostic patterns for Docker and Kubernetes. Guides investigation of crash dumps, application hangs, high CPU, and memory pressure through structured command packs and report templates.
agents/openai.yamlreferences/access-mcp.mdreferences/capture-playbooks.mdreferences/common-patterns.mdreferences/dump-workflow.mdreferences/linux-debugging.mdreferences/live-attach.mdreferences/mcp-setup.mdreferences/report-template.mdreferences/sanity-check.mdreferences/scenario-command-packs.mdreferences/symbols.mdreferences/task-crash.mdreferences/task-hang.mdreferences/task-high-cpu.mdreferences/task-kernel.mdreferences/task-memory.mdreferences/task-unknown.mdWindows and Linux/macOS debugging using WinDbg MCP tools (Windows), dotnet-dump, and lldb with SOS (Linux/macOS). Applicable to any application -- native, managed (.NET/CLR), or mixed-mode. Includes container diagnostic patterns for Docker and Kubernetes. Guides investigation of crash dumps, application hangs, high CPU, and memory pressure through structured command packs and report templates.
Platforms: Windows (WinDbg MCP, cdb), Linux/macOS (dotnet-dump, lldb with SOS, createdump, dotnet-monitor).
| Topic | Keywords | Description | Companion File |
|---|---|---|---|
| MCP setup | MCP server, WinDbg, configuration | MCP server configuration | references/mcp-setup.md |
| MCP access | MCP access, tool IDs, dispatch | MCP access patterns | references/access-mcp.md |
| Common patterns | debug patterns, SOS, CLR | Common debugging patterns | references/common-patterns.md |
| Dump workflow | dump file, .dmp, crash dump | Dump file analysis workflow | references/dump-workflow.md |
| Live attach | live process, cdb, attach | Live process attach guide | references/live-attach.md |
| Symbols | symbol server, .symfix, PDB | Symbol configuration | references/symbols.md |
| Sanity check | verify, environment, baseline | Sanity check procedures | references/sanity-check.md |
| Scenario packs | command pack, triage, workflow | Scenario command packs | references/scenario-command-packs.md |
| Capture playbooks | capture, procdump, triggers | Capture playbooks | references/capture-playbooks.md |
| Report template | diagnostic report, evidence | Diagnostic report template | references/report-template.md |
| Crash triage | crash, exception, access violation | Crash triage | references/task-crash.md |
| Hang triage | hang, deadlock, freeze | Hang triage | references/task-hang.md |
| High-CPU triage | high CPU, runaway thread, spin | High-CPU triage | references/task-high-cpu.md |
| Memory triage | memory leak, heap, LOH | Memory leak triage | references/task-memory.md |
| Kernel debugging | kernel, BSOD, bugcheck | Kernel debugging | references/task-kernel.md |
| Unknown triage | unknown issue, general triage | Unknown issue triage | references/task-unknown.md |
| Linux debugging | dotnet-dump, lldb, createdump, container | Linux/macOS debugging, dotnet-dump, lldb SOS, containers | references/linux-debugging.md |
Both skills use overlapping tools (dotnet-dump, dotnet-counters, dotnet-trace) but for different purposes:
| Scenario | Use this skill (debugging) | Use [skill:dotnet-tooling] |
|---|---|---|
| Investigating a crash dump (.dmp) | Yes | No |
| "Why did my app crash/hang/OOM?" | Yes | No |
| Attaching a debugger to a live process | Yes | No |
| "How do I profile my app's performance?" | No | Yes (profiling) |
| "How do I reduce GC pressure?" | No | Yes (gc-memory) |
| Collecting a dump for later analysis | Yes | No |
| Running dotnet-counters to monitor metrics | No | Yes (profiling) |
| Analyzing a dump with dotnet-dump | Yes | No |
| Decompiling an assembly to understand behavior | No | Yes (ilspy-decompile) |
Rule of thumb: if something is broken (crash, hang, deadlock, OOM), route here. If something is slow or needs optimization, route to [skill:dotnet-tooling].
These tool IDs are the WinDbg MCP server's exported names (single-underscore mcp_...), not the mcp__... dispatch prefix used by some hosts.
| Operation | Purpose |
|---|---|
mcp_mcp-windbg_open_windbg_remote | Attach to a live debug server |
mcp_mcp-windbg_open_windbg_dump | Open a saved dump file |
mcp_mcp-windbg_run_windbg_cmd | Execute debugger commands |
mcp_mcp-windbg_close_windbg_remote | Detach from live session |
mcp_mcp-windbg_close_windbg_dump | Close dump session |
Before any analysis, configure symbols to get meaningful stacks:
.symfix (sets srv* to Microsoft public symbols).sympath+ C:\path\to\your\pdbs.reload /flm (list modules -- check for "deferred" vs "loaded" status)Without correct symbols, stacks show raw addresses instead of function names.
mcp_mcp-windbg_open_windbg_dump with dump file path.loadby sos clr (Framework) or .loadby sos coreclr (.NET Core)!pe (print exception), !analyze -v (automatic analysis)~*e !clrstack (all managed stacks), !threads (thread list)!dumpheap -stat (heap summary), !gcroot <addr> (object roots)!threads, identify waiting threads with !syncblk (sync block table)!dlk (SOS deadlock detection)~Ns !clrstack for specific thread N!waitchain for COM/RPC chains, !mda for MDA diagnostics!runaway to identify threads consuming the most CPU time~Ns kb (native stack), ~Ns !clrstack (managed stack)!dumpheap -stat (type statistics), !dumpheap -type <TypeName> (filter)!gcroot <address> (trace GC roots to pinned or static references)!heap -s (heap summary), !heap -l (leak detection)!eeheap -gc (GC heap segments)## 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]
Cross-references: [skill:dotnet-tooling] for .NET SDK diagnostic tools (references/profiling.md) and GC/memory tuning (references/gc-memory.md).
npx claudepluginhub p/novotnyllc-dotnet-artisan-plugins-dotnet-artisanDiagnosing .NET performance issues. dotnet-counters, dotnet-trace, dotnet-dump, flame graphs.
Systematic debugging methodology with a bug classification decision tree and six-step workflow for crashes, hangs, performance issues, and intermittent bugs.
Debug Docker containers and containerized applications. Diagnose deployment issues, container lifecycle problems, and resource constraints.