mobiai-analyze-crash
Use when the user shares a crash from any source (stack trace, log, screenshot, error description) and wants to find the root cause and fix it.
- License 许可
- MIT
- 最近更新
- 2026-11-09
- Stars
- ★ 492
- Forks
- 14
01 前言 Front Matter
- name
- mobiai-analyze-crash
- license
- MIT
- platforms
- [ "android", "ios", "kmp", "flutter", "react-native" ]
- description
- Use when the user shares a crash from any source (stack trace, log, screenshot, error description) and wants to find the root cause and fix it.
- compatibility
- [ "claude-code", "cursor", "copilot", "codex" ]
03 SKILL.md 正文
Analyze Crash
Analyze a crash that the user provides, find the root cause in the codebase, and fix it.
When to Use
- User shares a stack trace, crash log, error screenshot, or any crash information
- User pastes a crash from any source (Crashlytics, Sentry, Bugsnag, logcat, Xcode console, a Slack message, an email — anything)
- User asks to investigate why something is crashing
What You Receive
The user may give you the crash in any format:
- A raw stack trace pasted into the chat
- A screenshot of a crash
- A log file
- A description like "the app crashes when I tap X"
- A URL to a crash reporting tool
- Anything else — work with what you have
Workflow
Step 1: Extract the Signal
From whatever the user gave you, identify the key information:
- Exception / error type — e.g.,
NullPointerException,EXC_BAD_ACCESS,RangeError,SIGSEGV - Crash location — file, line number, method name (if available in the stack trace)
- Call stack — the sequence of calls that led to the crash
- Context — what the user was doing when it happened, which screen, which action
If the information is incomplete, ask the user for more context. But don't block on it — work with what you have.
Step 2: Classify the Crash Type
Identify the category to guide your investigation:
| Type | Common Signals | Where to Look |
|---|---|---|
| Null reference | NullPointerException, EXC_BAD_ACCESS, forced unwrap nil | Trace where the null value originates — usually an upstream initialization issue |
| Concurrency | ConcurrentModificationException, data race, random EXC_BAD_ACCESS | Shared mutable state, missing synchronization, wrong thread |
| Index out of bounds | IndexOutOfBoundsException, ArrayIndexOutOfBoundsException | Array/list access without bounds checking, empty collections |
| Lifecycle | IllegalStateException, "view not attached", "no activity" | Fragment/Activity lifecycle, accessing UI after destroy |
| Memory | OutOfMemoryError, jetsam kill | Leaks, large bitmap allocations, unbounded caches |
| Network | SocketTimeoutException, SSLException | Missing error handling in network layer |
| Database | SQLiteException, Core Data error | Schema migrations, thread safety, constraint violations |
| Type casting | ClassCastException, Swift as! failure |
Wrong type assumptions, generics, serialization |
Step 3: Find the Root Cause in the Codebase
For root cause investigation, follow the mobiai-mobile-debugging skill methodology: no guessing, trace data backward, form hypotheses based on evidence.
Starting from the crash location:
-
Find the crashing code — use the file and line from the stack trace:
Grep for the class name or method name from the stack trace Read the file at the crash location -
Trace backwards — the crash site is usually not the root cause. Follow the data flow upstream:
- Where does the null value come from?
- Who populates this list that's empty?
- What thread is calling this method?
-
Check recent changes — the crash may have been introduced recently:
git log --oneline -10 -- <crashing-file> git blame <crashing-file> -
Understand the full context — read surrounding code, the class structure, how the component is used.
Step 4: Decide — Fix or Propose
Based on confidence and complexity:
- High confidence, simple fix — apply the fix directly. Use the
mobiai-fix-issueskill workflow: edit the code, verify it compiles, run tests. - Complex fix or uncertain root cause — explain what you found, what the root cause is, and propose how to fix it. Let the user decide.
- Can't find the root cause — explain what you investigated, what you ruled out, and ask the user for more context.
Step 5: If Fixing
Apply a minimal fix:
- Change only what is necessary
- Do NOT refactor surrounding code
- Verify it compiles
- Run existing tests to check for regressions
- If applicable, load the
mobiai-write-testsskill to add a regression test
Platform-Specific Patterns
Android
FATAL EXCEPTIONin logcat — app process crashed- ANR (Application Not Responding) — main thread blocked >5 seconds
Process: <package>lines identify which app crashed- StrictMode violations in debug builds hint at production issues
iOS
EXC_BAD_ACCESS— memory access violation (nil dereference, dangling pointer)EXC_BREAKPOINT—fatalError(),preconditionFailure(), Swift runtime checks- Release builds need symbolication —
atosor Xcode Organizer - Crash reports in
~/Library/Logs/DiagnosticReports/
Flutter
FlutterError— widget build errors, assertion failures- Platform channel errors — bridge between Dart and native
- Check BOTH the Dart stack trace AND the native (Android/iOS) logs
React Native
- Red screen errors in development
- JavaScript errors in
adb logcat | grep ReactNativeJS - Native crashes appear in normal Android/iOS logs — not in JS
KMP
- Shared code crashes may appear differently per platform
- Check if the crash is in
commonMain(shared) or platform-specific (androidMain/iosMain) - Kotlin/Native memory model issues on iOS side
04 同仓库更多 Skills
mobiai-react-native
Use when working on a React Native project — building, testing, debugging, understanding navigation and state management.
mobiai-kmp
Use when working on a Kotlin Multiplatform project — shared code, expect/actual declarations, platform-specific implementations, building and testing.
mobiai-ios-testing
Use when writing or running tests in an iOS project — unit tests, UI tests, snapshot tests, choosing the right framework.
mobiai-ios-device
Use when interacting with an iOS Simulator — run simctl commands, capture screenshots, read device logs, manage simulators.
mobiai-ios-build
Use when building an iOS project, configuring schemes, troubleshooting build failures, or managing dependencies with CocoaPods or SPM.
mobiai-ios-architecture
Use when creating features, refactoring, or navigating an iOS codebase — understand project structure, find where to make changes, follow existing patterns.