Crash report via Sentry - #3348
Conversation
Official builds bake a DSN via StrideSentryDsn (false disables sending, unset lets the user pick a destination per crash). Reports carry app@version release, environment tag, and are anonymized including Sentry stack frames. Nothing is sent without a click.
The full Win32_VideoController dump included machine-identifying values such as SystemName and PNPDeviceID.
Tags for Stride version, graphics API, and active GPU; typed GPU context matched from the WMI inventory; per-adapter and memory context panels; log lines and undo/redo actions as breadcrumbs; the rest as extras. report.txt stays attached as the exact text the user previewed. Optional minidump (thread stacks + modules) behind an unchecked-by-default checkbox with a privacy warning.
Report the adapter the editor renders with (WMI order does not identify it), the graphics platform, the CPU model, working set + GC memory info, and grow the log ring buffer to 50 lines including warnings.
Sent through Sentry user feedback attached to the crash event; all three fields are empty by default and only sent when filled in.
Readable colors when the host theme dictionaries are absent (crash before the application initialized), fields above the button row, auto-sized buttons, clearer minidump wording.
Walks the stream directory and masks only inside module name strings, CodeView records (PDB paths), and captured memory ranges, with same-length overwrites so offsets never shift. ASCII names match case-insensitively; non-ASCII names as exact byte patterns of their common casings in UTF-16, UTF-8, and Latin-1. Validated: scrubbed dump opens in cdb with all thread stacks and symbols intact, and byte scans find no remaining occurrence in any encoding.
Save dump dropdown with two choices: the small anonymized minidump, or a full memory dump written straight to disk after a warning that it includes project data. The full dump never leaves the machine; sharing it is the user's own choice, which also sidesteps upload size limits.
Official builds state that the report goes to the Stride team through Sentry (source builds name their destination in the chooser). Send report is the default button (Enter in the DSN box routes to Send now instead). Escape closes like the X, both guarded by a confirmation if a typed description would be lost. Line break in the intro, and the extinguisher icon was near-black on the dark background.
The dev DSN routes through crash.stride3d.net (Azure Front Door proxy to Sentry) so the backend can move without rebuilding shipped binaries. Events keep the SDK's random installation id so issues can count affected machines; SendDefaultPii=false drops name/email/IP (IP storage is also disabled server-side). A contact email travels only through the feedback field. The window notice discloses the identifier.
|
|
||
| public static Dictionary<string, string> GetVideoConfig() | ||
| { | ||
| return OperatingSystem.IsWindows() ? GetVideoConfigWindows() : []; |
There was a problem hiding this comment.
You're calling OS-specific code. I know GameStudio isn't cross-platform yet, but it's worth having these checks somewhere in place for the future. But its just a nitpick 😅️
There was a problem hiding this comment.
Hmm, now that I think about it, we could move AppHelper to a new folder called "Desktop" (or Core?). The same thing goes with FileLock.cs (its fully xplat now)
|
Did we use this? https://sentry.io/for/open-source/ |
|
I just fixed the conflicts with the new Launcher 😅. Can we decide if we merge that first or not? And make sure the crash helper classes and methods are cross-platform as much as possible. |
Sentry derives a city-level location from the forwarded client IP, and neither disabling IP storage nor a $user.geo scrubbing rule removes it (geo is enriched after scrubbing). Sending a concrete 0.0.0.0 instead of no IP stops the fallback to the forwarded address, so no location is derived.
Good point, let's get it done, then I can rebase this PR on it. |
|
It's not very important, as it's just a crash handler window, but...
|
|
@xen2 not sure what remaining conflict you are talking about. I had already fixed all conflicts before making my comment. |
|
Not really related to functionality, but I think there are too many buttons at the bottom, creating choice paralysis. It would be good to separate "Send report" and "Open an issue" to a separate row and color them differently from others if that's possible. Or alternatively, move those to the right and the others to the left. Also, where would you be able to view these reports? I am assuming they would be public? It would be good to link that in the docs somewhere |
Somehow github doesn't show the merge button due to that. |
I already did try to make the Send report stand out by putting it in bold and default focus for enter button. |
Sorry, it was me being tricked by github UX, and I think it's not the first time (it remembered rebase/squash as my last action so it was showing greyed out and impossible to merge with conflicts; I was confused with the button being greyed out, the dropdown is still available to go back to merge) |
The full dashboard won't be public as it might expose private info (stack dump if user selects them, email/desc if user fills it, etc.)
|
|
🤖 Draft PR — automatic CI is skipped to save runner minutes.
|
|
Switching to draft as I adjust a few loose ends and rebase (I need to decide if convert to Avalonia or keep WPF version until full editor is Avalonia). |
PR Details
Adds an optional crash report upload to the GameStudio and Launcher crash window, sending to Sentry only when the user clicks Send report.
Nothing is sent automatically.
What's sent
report.txtattachment (same text as View report)Privacy
Extras
StrideSentryDsn(build property,falsedisables the button); source builds let the user pick a destination.Config
StrideSentryDsn/StrideSentryEnvironmentbuild properties.Related Issue
#3279 #2261 #3 #1815 #204
Types of changes
Checklist