Exception Tracking automatically captures application errors and performance issues in production. When your app crashes, hangs, or fails to load resources, Exception Tracking collects error details, stack traces, and user context—helping you identify root causes and reproduce issues.
Features
With Exception Tracking, you can:
Detect errors automatically - The SDK captures crashes, ANRs, lag, and network failures without manual instrumentation.
Pinpoint exact code locations - Get symbolicated stack traces mapping directly to source files and line numbers.
Reproduce issues with session replays - See the exact user action sequence that triggered the error.
Diagnose network problems - Break down request timing by DNS, TCP, TLS, and TTFB to isolate client vs. server issues.
Monitor app stability - Track error rates across versions, devices, and pages.
Preparations
Before you begin, ensure that you have:
Created an application in the console and obtained the initialization code.
Integrated and initialized the SDK, see Integrate Web and H5 Applications.
Note: Exception Tracking is enabled by default after SDK initialization. The SDK automatically collects network errors, crashes, ANRs, and lag events without additional configuration.
How Exception Tracking Works
Detection Methods
The SDK detects exceptions through:
Automatic capture - Monitors network request failures, crash signals, main thread blocking, and frame rate drops without code changes.
Manual reporting - Reports exceptions caught in your code (e.g., try-catch blocks) via the SDK's custom exception API for non-fatal errors or business-specific failures.
Stack Trace Collection and Symbolication
When an exception occurs, the SDK captures the call stack. Symbolication requirements vary by platform:
Web and Mini-Programs - Collects JavaScript error stack traces. For minified code, the service uses your SourceMap files to de-obfuscate stacks, mapping compressed positions to original file names, method names, and line numbers.
Mobile Apps (iOS/Android) - Captures full call stacks from the crash thread and all threads, plus binary image metadata (module names, architectures, UUIDs, load addresses). The service uses your symbol files (iOS dSYM / Android Mapping) to symbolicate memory addresses into readable class names, method names, and line numbers.
The goal: transform raw stacks into human-readable source locations for direct code inspection.
Contextual Enrichment
Every exception event includes:
Session ID - Links to the complete user session for action replay.
Page information - Page name and ID where the error occurred.
User identifiers - User ID, username, or custom identifiers.
Device and environment - Device model, OS version, network type, app version.
This context provides the full user journey—not just an isolated stack trace.
Exception Processing Flow
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Exception │───▶│ Signal │───▶│ Stack │
│ Occurs │ │ Capture │ │ Collection │
└──────────────┘ └──────────────┘ └──────┬───────┘
│
▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Console │◀───│ Server-side │◀───│ Attach │
│ Root Cause │ │ Symbolication│ │ Context │
│ Analysis │ │ & Restore │ │ & Report │
└──────────────┘ └──────────────┘ └──────────────┘
Note: Crashes terminate the app, so crash data is reported on the next app launch.
Exception Types
Network Request Errors
The SDK intercepts network requests. When requests fail, time out, or return HTTP errors, it logs errors with detailed timing breakdowns to distinguish client-side network issues from server-side problems.
Attribute | Description |
Request URL | Full request address |
HTTP Method | Request method (GET, POST, etc.) |
Status Code | HTTP response status code |
Error Type | Error classification (timeout, connection failure, etc.) |
Resource Type | Resource type (API, Image, Media, Font, etc.) |
DNS Timing | DNS resolution time (ms) |
TCP Connect Timing | TCP connection time (ms) |
TLS Timing | TLS handshake time (ms) |
Time to First Byte (TTFB) | Time from request sent to first response byte (ms) |
Response Timing | Total response time (ms) |
Request Size | Request body size (bytes) |
Response Size | Response body size (bytes) |
Timing breakdowns help identify issues:
High DNS timing - DNS resolver instability or domain configuration issue
High TCP/TLS timing - Network path instability or certificate issue
High TTFB - Server processing delay
HTTP 4xx/5xx status - Server-side error requiring backend investigation
Slow Page Loads
The SDK measures page load time for every view. When load time exceeds the configured threshold, the page is flagged as slow.
Attribute | Description |
Page Name | Page identifier |
Page URL | Page path |
Page Load Time | Time from load start to complete (ms) |
Slow Load Flag | Whether threshold was exceeded |
Page Dwell Time | Time user spent on the page (ms) |
Note: Configure the slow load threshold remotely via the console.
App Crashes
The SDK captures crashes during app execution, including uncaught exceptions and system-level errors. Crash data is reported on next app launch.
Supported crash types:
Crash Type | Description | Platform |
Uncaught Exceptions | Runtime exceptions not caught (e.g., iOS NSException, Android UncaughtException) | Mobile |
System Signals | SIGSEGV (illegal memory access), SIGABRT (abnormal termination), SIGBUS (bus error) | Mobile |
JavaScript Error | Uncaught JS runtime errors (TypeError, ReferenceError) | Web / Mini-Programs |
Promise Rejection | Unhandled Promise rejections | Web / Mini-Programs |
Wild Pointer Access | Crashes from accessing deallocated objects | Mobile |
Captured attributes:
Attribute | Description |
Exception Type | Crash classification |
Exception Subtype | Specific signal type or error category |
Exception Name | Exception name |
Exception Reason | What caused the crash |
Stack Trace | Full call stack at crash point |
Crash Thread ID | Thread identifier where crash occurred (mobile) |
Binary Images | Module names, architectures, UUIDs, load addresses for symbolication (mobile) |
Page Context | Page where crash occurred |
Session ID | Session containing the crash |
App State | Whether app was in foreground |
Crash Timestamp | Exact crash time |
ANR (Application Not Responding)
The SDK detects when the main thread is blocked for an extended period. When blocking exceeds the threshold, an ANR event is logged with the main thread stack trace.
Attribute | Description |
Exception Type | ANR / Main thread deadlock |
Stack Trace | Main thread call stack at ANR |
Binary Images | Module information for symbolication |
Page Context | Page where ANR occurred |
Session ID | Session containing the ANR |
Common ANR causes:
Main thread performing synchronous I/O operations (file reads/writes, database queries)
Main thread executing heavy computation or large data processing
Deadlock or inter-thread waiting
Synchronous network requests blocking the main thread
Lag (Long Task)
The SDK monitors main thread execution and rendering frame rate. When it detects long-running blocking or frame rate drops, it records lag events.
Attribute | Description |
Lag Type | Lag classification (main thread blocking, frame rate drop) |
Lag Duration | Main thread blocking duration (ms) |
Stack Trace | Main thread call stack during lag |
Binary Images | Module information for symbolication |
Page Context | Page where lag occurred |
Session ID | Session containing the lag |
Detected lag types:
Main Thread Blocking - Tasks exceeding the execution time threshold
Frame Rate Drop (FPS Drop) - Rendering frame rate below threshold, causing UI stuttering
Disk I/O Blocking - Disk read/write operations on the main thread
CPU Overload - High CPU usage causing performance degradation
Root Cause Analysis
Exception Tracking helps you move quickly from symptoms to root causes:
Stack Symbolication
Raw stacks require symbolication to become actionable:
Web apps - Upload SourceMap files to map minified code positions to original source file names, method names, and line/column numbers.
Mobile apps - Upload symbol files (iOS dSYM / Android Mapping) to convert memory addresses to readable class names, method names, and line numbers.
After symbolication:
Identify the class and method - See exactly which class and method threw the error.
Jump to the source line - Get the precise file name and line number.
Symbolicated stacks let you jump directly to the problematic code.
Session Replay
Every exception links to a Session ID and page context. From the console, view the user's complete action sequence before the error:
Which pages the user visited in order
What actions they performed on each page (taps, scrolls)
Which network requests were triggered and whether they succeeded
Whether other errors or lag occurred before the final exception
This context provides the full scenario—not just an isolated stack trace.
Multi-Dimensional Aggregation
The console automatically groups similar exceptions. Analyze impact and distribution patterns across dimensions:
Device - Errors concentrated on specific device models or OS versions
Version - Error introduced in a particular release
Page - Errors concentrated on specific pages
Time - Error spikes during specific time windows
Use Cases
Diagnosing Crash Root Causes
Production crash rate suddenly spikes. Check the crash list in the console to identify new crash types. View the symbolicated stack to pinpoint the exact code line. Review session replays—crashes consistently occur after users perform a specific action sequence, confirming a logic bug in the latest release.
Troubleshooting Network Failures
User reports "data failed to load." Use the user ID to find the session. Locate the failed network request in the session trace. Check timing: DNS and TCP connection are normal, but TTFB exceeds 10 seconds and returns 504—identifying a backend timeout for escalation to the server team.
Optimizing Lag Performance
User reports "list scrolling is choppy." Check lag events—many frame rate drops concentrate on the product list page. Review the lag stack trace—the main thread performs synchronous image decoding during scroll. Move image decoding to a background thread, resolving the lag.
FAQ
Do I need to manually enable Exception Tracking?
No. After SDK initialization, crashes, ANRs, lag, and network errors are collected automatically.
Is crash data reported in real time?
Mobile crashes terminate the app, so crash data is reported on next app launch. Web JavaScript errors are reported in real time. Other exception types (network errors, lag, ANR) are reported in real time.
How do I upload symbol files or SourceMaps?
Upload files in the console's application settings: Web apps upload SourceMap files, iOS apps upload dSYM files, Android apps upload Mapping files. We recommend integrating automatic uploads into your CI/CD pipeline to ensure timely symbol file uploads for every release.
How do I report custom exceptions?
For exceptions caught in your code, use the SDK's custom exception reporting API. Refer to your platform's SDK configuration documentation for API usage.
What's the difference between ANR and lag?
ANR indicates the main thread is completely unresponsive for an extended period (typically from deadlock or severe blocking)—a critical issue. Lag indicates brief main thread blocking or frame rate drops causing UI stuttering—affects user experience but doesn't render the app unresponsive. Detection mechanisms and thresholds differ; ANR thresholds are typically higher.
Does exception collection impact app performance?
The SDK's exception collection is optimized for minimal performance impact. Stack collection only triggers when exceptions occur. Lag and frame rate monitoring use lightweight detection methods with negligible main thread overhead.