Samples~/BasicIntegration/Assets/Scripts/GuideExamples.cs
OnError always fires on the Unity main thread, so handlers may touch Unity APIs. A throwing handler is caught and logged. Unsubscribe with -= when the subscriber is destroyed.
Severities
Warning means degraded but recovered: a single fallback, a dropped event. Log it and watch the rate. Error means a failure to investigate: authentication failed, ingestion gave up, an unhandled SDK exception. Info is reserved.
Codes worth knowing
Branch onPioError.Code against the PioErrorCodes constants, never on message text.
What reports automatically
Notry/catch needed around SDK calls. Fallbacks, timeouts, auth and ingestion failures, and internal exceptions are all captured and surfaced. Each is also sent to PIO as an sdk_error event (code, severity, message, normalised stack, no PII), de-duplicated by stack hash. There is no third-party crash reporter in the SDK.
Debugging tools
PIO/Diagnostics/Inspector and PIO/Diagnostics/Event Log cover Play mode; ShowDebugOverlay puts a live panel on device builds. Editor tools has the tour.