Mobiai analyze crash
Skill ArisGuimera/MobiAI-Core/skills/core/skills/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.From its SKILL.md
npx -y skills add ArisGuimera/MobiAI-Core --skill mobiai-analyze-crashAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its file declares
Copied from the file, not written here
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
5.5 KB, as published. Nobody here has run it
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