Quick answer: Capture crashes automatically with headset model, runtime, and frame timing attached, because VR players cannot screenshot or describe what happened. Handle Quest standalone as an Android target and SteamVR as a PC target, and watch reprojection and dropped frames as early warning signs.
VR has a brutal feedback problem: a player wearing a headset cannot take a screenshot, cannot read a stack trace, and often cannot even tell you which scene they were in when everything froze. If you ship a VR game and rely on players to describe crashes, you are flying blind. Automatic crash and performance capture is not a nice-to-have in VR, it is the only way to know what is actually breaking.
Why VR crash reporting is different
In a flat-screen game a frozen frame is annoying. In VR it can make a player physically ill, and the instinct is to rip the headset off immediately. That means the moment of failure is also the moment the player is least able to help you. You have to capture everything automatically, before the headset comes off.
VR also fails in ways desktop games do not. Tracking loss, guardian or boundary glitches, reprojection storms, and runtime mismatches all produce reports that read it broke and I felt sick. None of those are reproducible without the technical context: headset model, runtime version, and frame timing at the moment things went wrong.
Quest standalone is an Android target
Meta Quest standalone builds run on Android, so your crash reporting has to work the same way mobile crash reporting does. Capture the unhandled exception or native crash, record the device model, OS build, and available memory, and queue the report to upload on the next launch when connectivity is available.
Memory is the silent killer on standalone headsets. Quest devices have a hard memory ceiling and the OS will kill your app without a clean crash log if you exceed it. Recording available memory and your own allocation high-water mark in every report lets you spot the out-of-memory kills that otherwise look like random disappearances.
SteamVR runs on the PC, with PC variability
SteamVR titles run on the player PC and inherit all of its variability: GPU model, driver version, and which runtime is active. The same build can be rock solid on one headset and crash constantly on another because of a driver bug or an OpenXR runtime quirk. Capture the GPU, driver version, and active runtime in every crash report so you can group failures by hardware.
OpenXR has made cross-headset support easier, but runtime differences between Meta, SteamVR, and other OpenXR providers still cause crashes. When you tag reports with the runtime, a cluster of crashes on a single runtime points you straight at the cause instead of sending you chasing a ghost across every headset.
Frame timing is your early warning system
Most VR problems show up as performance before they show up as a crash. Reprojection kicking in, dropped frames, and rising frame times all degrade comfort long before the app dies. Capturing frame timing alongside crashes lets you see the slow build-up that preceded a failure, and often the performance data alone tells you where to look.
Attach a short rolling window of frame times and reprojection events to each report. A crash that was preceded by ten seconds of dropped frames in a specific scene is far easier to reproduce than a bare stack trace, because it points you at the exact load that pushed the headset over the edge.
Setting it up with Bugnet
Bugnet treats Quest builds as an Android target and SteamVR builds as a PC target, so you get the right device context for each automatically. The SDK captures unhandled exceptions, attaches headset model, runtime, and your custom frame-timing metadata, and uploads pending reports on the next launch.
Because you cannot ask a VR player to fill in a form mid-session, lean on automatic capture and add custom fields for the data only your game knows, like the current scene, comfort settings, and locomotion mode. Those three fields turn an unreproducible report into a precise repro recipe.
What to do with the crash data you collect
Collecting VR crashes is only useful if you act on the patterns. Group your reports by headset model first, because hardware fragmentation is the single biggest source of VR-specific failures. A crash that only appears on one device generation usually points to a memory ceiling, a missing extension, or a driver behavior you can target directly instead of treating as a general bug.
Then layer in your custom metadata. When you see that a cluster of crashes all share the same scene and locomotion mode, you have a reproducible test case for your own QA team without ever needing the original player back. The whole point of automatic capture in VR is to compensate for the fact that the player cannot help you in the moment, so let the aggregated data do the talking and prioritize the crashes that affect the most headsets.
If the player can take the headset off, you have already lost the report. Capture it first.