Claude-skill-registry crash-instrumentation
Set up crash instrumentation with actionable context. Use when configuring crash capture, error boundaries, or breadcrumb strategies.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/crash-instrumentation" ~/.claude/skills/majiayu000-claude-skill-registry-crash-instrumentation && rm -rf "$T"
manifest:
skills/data/crash-instrumentation/SKILL.mdsource content
Crash Instrumentation
Capture crashes with the context needed to debug them.
Core Principle
A crash report without context is useless. Every crash should include:
| Context | Why | Example |
|---|---|---|
| Where it happened | "CheckoutScreen" |
| What user was doing | "checkout" |
| Where in the flow | "payment" |
| What led here | Last 20 user actions |
| Release correlation | "1.2.3" |
| Who's affected | "premium", "trial" |
Breadcrumb Strategy
Breadcrumbs are the trail leading to a crash. Capture:
| Category | What to Log | Example |
|---|---|---|
| Screen transitions | "HomeScreen → CartScreen" |
| Taps, inputs, gestures | "Tapped checkout button" |
| API calls (not payloads) | "POST /api/orders started" |
| Key state changes | "Cart updated: 3 items" |
| Non-fatal errors | "Retry #2 for payment" |
Limit: Keep last 20-50 breadcrumbs. More is noise.
Error Boundaries
Catch errors before they crash the app:
// iOS - capture context before crash func captureError(_ error: Error, screen: String, job: String?) { Observability.captureError(error, context: [ "screen": screen, "job_name": job ?? "unknown", "session_duration": sessionDuration(), "memory_pressure": memoryPressure() ]) }
// Android - uncaught exception handler Thread.setDefaultUncaughtExceptionHandler { thread, throwable -> Observability.captureError(throwable, mapOf( "thread" to thread.name, "screen" to currentScreen, "job_name" to currentJob )) previousHandler?.uncaughtException(thread, throwable) }
What NOT to Attach
| Don't | Why |
|---|---|
| Full stack traces in breadcrumbs | Redundant, SDK captures this |
| User input text | PII risk |
| Full request/response bodies | Size limits, PII |
| Entire app state | Unbounded, noise |
Crash Types to Handle
| Platform | Type | Instrumentation |
|---|---|---|
| iOS | | Breadcrumbs, memory context |
| iOS | (watchdog) | Background task tracking |
| Android | | Main thread breadcrumbs |
| Android | | Memory tracking |
| React Native | JS exceptions | Error boundaries |
Implementation
See
references/crash-reporting.md for:
- Platform-specific crash capture setup
- Breadcrumb implementation patterns
- Vendor SDK configuration
See
skills/symbolication-setup for readable stack traces.