Marketplace

crash-instrumentation

Set up crash instrumentation with actionable context. Use when configuring crash capture, error boundaries, or breadcrumb strategies.

$ インストール

git clone https://github.com/nexus-labs-automation/mobile-observability /tmp/mobile-observability && cp -r /tmp/mobile-observability/skills/crash-instrumentation ~/.claude/skills/mobile-observability

// tip: Run this command in your terminal to install the skill


name: crash-instrumentation description: Set up crash instrumentation with actionable context. Use when configuring crash capture, error boundaries, or breadcrumb strategies. triggers:

  • "breadcrumb strategy"
  • "capture crashes"
  • "crash context"
  • "crash reporting"
  • "debug crashes"
  • "error boundaries" priority: 1

Crash Instrumentation

Capture crashes with the context needed to debug them.

Core Principle

A crash report without context is useless. Every crash should include:

ContextWhyExample
screenWhere it happened"CheckoutScreen"
job_nameWhat user was doing"checkout"
job_stepWhere in the flow"payment"
breadcrumbsWhat led hereLast 20 user actions
app_versionRelease correlation"1.2.3"
user_segmentWho's affected"premium", "trial"

Breadcrumb Strategy

Breadcrumbs are the trail leading to a crash. Capture:

CategoryWhat to LogExample
navigationScreen transitions"HomeScreen → CartScreen"
userTaps, inputs, gestures"Tapped checkout button"
networkAPI calls (not payloads)"POST /api/orders started"
stateKey state changes"Cart updated: 3 items"
errorNon-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'tWhy
Full stack traces in breadcrumbsRedundant, SDK captures this
User input textPII risk
Full request/response bodiesSize limits, PII
Entire app stateUnbounded, noise

Crash Types to Handle

PlatformTypeInstrumentation
iOSEXC_BAD_ACCESSBreadcrumbs, memory context
iOSSIGKILL (watchdog)Background task tracking
AndroidANRMain thread breadcrumbs
AndroidOutOfMemoryErrorMemory tracking
React NativeJS exceptionsError 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.