TL;DR: Ten-step workflow for turning a crash report into a documented root cause: capture context in the Azure DevOps bug, check MetroLog/logcat, query Sentry (sentry-cli issues list -p dotnet-maui, orgair-line-pilots-association-eo), symbolicate iOS logs against uploaded dSYMs, then analyze, document, and prevent recurrence. Jump to Quick Reference Commands for the sentry-cli/adb one-liners; performance hangs belong in profiling instead.
When a crash is discovered during testing or reported by users, use this workflow to capture actionable diagnostics and document findings in Azure DevOps.
Document the following in the Azure DevOps bug:
Logs are stored in the app Documents directory and commonly shared as a zip export.
python3 -m zipfile -e crash-logs.zip /tmp/
grep -n "TIMESTAMP" /tmp/Log\ -\ YYYYMMDD.log
grep -i -A 20 -B 5 "exception\|crash\|fatal" /tmp/Log\ -\ YYYYMMDD.log
Look for: last logged action before crash, exception messages (if caught by .NET), stack traces, thread IDs, authentication state, network requests in flight.
If no exception is logged, suspect a native crash where the runtime terminated before .NET logging completed.
which sentry-cli)sentry-cli info)# List unresolved issues
sentry-cli issues list --status unresolved --max-rows 30 -p dotnet-maui
# Search by date or platform
sentry-cli issues list --all --query "firstSeen:>2026-02-15" --max-rows 30 -p dotnet-maui
sentry-cli issues list --all --query "platform:cocoa" --max-rows 30 -p dotnet-maui
# Search by environment
sentry-cli issues list --all --query "environment:production" -p dotnet-maui
sentry-cli issues list --all --query "environment:testflight" -p dotnet-maui
sentry-cli issues show <ISSUE_ID>
Review in Sentry Web UI: open Sentry project issues, navigate to Issues, open the matching crash issue, review stack trace, breadcrumbs, device data, and tags.
Typical file formats: ALPADocs-YYYY-MM-DD-XXXXXX.ips, ALPADocs_YYYY-MM-DD_XXXXXX.crash
ALPADocsALPADocsadb devices
adb logcat -d > crash-logcat.txt
grep -i "exception\|fatal\|crash" crash-logcat.txt
grep "com.accella.alpa" crash-logcat.txt
# Check dSYM upload status
sentry-cli debug-files list --type dsym -p dotnet-maui
sentry-cli debug-files list --type dsym -p dotnet-maui | grep "5.0.8"
# Upload missing dSYMs
sentry-cli debug-files upload \
--org air-line-pilots-association-eo \
--project dotnet-maui \
ALPAMobile/bin/Release/net10.0-ios/ios-arm64/ALPADocs.app.dSYM/
# Symbolicate locally (macOS)
xcrun atos -o ALPADocs.app.dSYM/Contents/Resources/DWARF/ALPADocs \
-arch arm64 \
-l <load_address> \
<crash_address>
| Exception Code | Meaning | Common Causes |
|---|---|---|
EXC_BAD_ACCESS (SIGSEGV) | Memory access violation | Null dereference, use-after-free, overflow |
EXC_CRASH (SIGABRT) | Abort signal | Uncaught exception, assertion failure |
EXC_BAD_INSTRUCTION (SIGILL) | Invalid instruction | Memory corruption, invalid pointer |
SIGBUS | Bus error | Unaligned memory access |
Watchdog | Launch or terminate timeout | Deadlock, infinite loop on main thread |
| Exception | Meaning | Common Causes |
|---|---|---|
NullPointerException | Null reference | Missing null checks |
OutOfMemoryError | Memory exhausted | Bitmap leaks, large allocations |
ANR | UI thread blocked >5s | Main-thread work, deadlock |
IllegalStateException | Invalid state | Activity or fragment lifecycle mismatch |
## Crash Analysis
### Crash Type
- Exception: [type]
- Signal: [signal]
- Thread: [main/background]
### Stack Trace
[paste symbolicated stack trace]
### Crash Location
- File: [file]
- Method: [method]
- Line: [line]
### Root Cause
[summary]
### Contributing Factors
- [factor]
### Sentry Link
[issue link]
# Capture logs on iOS UI test failure
- name: Capture iOS Crash Logs on Failure
if: failure()
run: |
xcrun simctl spawn booted log show --predicate 'process == "ALPADocs"' \
--style syslog --last 5m > crash-logs.txt
# Query Sentry after failure
- name: Query Sentry for Recent Crashes
if: failure()
run: |
sentry-cli issues list --query "firstSeen:>$(date -u -d '1 hour ago' +%Y-%m-%d)" \
-p dotnet-maui --max-rows 10
# Existing dSYM upload in pipeline
- task: CmdLine@2
displayName: Sentry-CLI Upload dSYM
inputs:
script: 'sentry-cli debug-files upload --auth-token $(SentryAuthToken) --org air-line-pilots-association-eo --project dotnet-maui ALPAMobile/bin/Release/net10.0-ios/ios-arm64/ALPADocs.app.dSYM/'
sentry-cli info
sentry-cli issues list --status unresolved --max-rows 20 -p dotnet-maui
sentry-cli issues list --all --query "firstSeen:>2026-02-20" -p dotnet-maui
sentry-cli debug-files list --type dsym -p dotnet-maui
adb logcat -d > crash.txt