Skip to content

docs: BugSplat Native (9.0) section, per-platform guides and migration - #342

Open
bobbyg603 wants to merge 1 commit into
masterfrom
feat/native-9-docs
Open

bobbyg603 wants to merge 1 commit into
masterfrom
feat/native-9-docs

Conversation

@bobbyg603

Copy link
Copy Markdown
Member

What

A new 🧬 BugSplat Native (9.0) group under Integrations for the unified SDK (BugSplat-Git/bugsplat-native):

  • native/README.md overview: how the monitor/reporter model works, the ten-line integration, what every platform shares (properties changeable any time, environment, policies, presigned upload, client-side crash signature), platform table, links to the in-repo reference docs.
  • Per-platform guides: Windows (verified: runtime files, CMake, init in C/C++/.NET, dynamic metadata, non-crash reports, hangs, WER allow-list, heap/full dumps, PDB symbols, theming, troubleshooting), macOS, Linux, Android, iOS/tvOS (each opens with a status hint saying it is being brought up and pointing at the shipping SDK for production today; .sym symbols everywhere Crashpad runs).
  • Guides: Hang Detection, Structured Reports (XML schema + JSON mirror, .NET managed exceptions, ASan), User Feedback (SDK side), Crash Data Format (store layout, BugSplatCrashData.json, result.json, pending/retry), Migrating to 9.0 (8.x method mapping table, apple 2.x, android 1.x, "what you don't have to change").
  • Pointers: Welcome page card, Choose Your Platform, Desktop/Mobile indexes, Downloads row, hints at the top of the Windows C++, macOS, Linux, Android and iOS guides.
  • Crash Post Endpoints: infoUrl is returned before processing; new "Fields sent by BugSplat Native 9.0" table (environment, crashSignature, crashHash) and how reportKind travels. Written below the response block so it does not overlap docs(web-services): environment field on commitS3CrashUpload #341's environment row.
  • User Feedback: "From the SDKs" section.
  • FAQ: the localized support-response page no longer says other platforms are "coming soon".

No Sentry/Firebase mentions; the Xbox page is untouched (still points at the private SDK).

Notes for review

  • Platform pages for macOS/Linux/Android/iOS describe the design in docs/ARCHITECTURE.md; items not yet in a release are marked planned or carry a status hint. Update the hints as each platform is verified.
  • Relative links were checked with a script (all resolve).

🤖 Generated with Claude Code

https://claude.ai/code/session_01HHo6UdKBQXDABUhRgHWdW2

…and the native commit fields

New "BugSplat Native (9.0)" group under Integrations: overview, Windows (verified), macOS,
Linux, Android, iOS/tvOS (each with a status line), hang detection, structured reports, user
feedback, crash data format, migration from bugsplat-windows 8.x / bugsplat-apple 2.x /
bugsplat-android 1.x. Pointers from the Welcome page, the integrations indexes, the existing
platform guides and Downloads. Crash Post Endpoints documents infoUrl timing and the fields the
native SDKs send (environment, crashSignature, crashHash, reportKind annotation); User Feedback
points at the SDK APIs; the support-response FAQ no longer says other platforms are coming soon.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HHo6UdKBQXDABUhRgHWdW2
Copilot AI lite review requested due to automatic review settings September 12, 2026 03:41

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved documentation inaccuracies affect platform behavior, report types, retry semantics, and setup guidance.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Adds BugSplat Native 9.0 documentation, platform guides, migration guidance, reporting references, and navigation updates.

Changes:

  • Adds Windows, macOS, Linux, Android, and iOS/tvOS guides.
  • Documents reporting, feedback, hang detection, crash storage, and migration.
  • Updates integration links, downloads, endpoint references, and support messaging.
File summaries
File Description
SUMMARY.md Adds Native documentation navigation.
README.md Links the Native integration group.
introduction/getting-started/integrations/README.md Highlights Native 9.0.
introduction/getting-started/integrations/native/windows.md Adds the Windows integration guide.
introduction/getting-started/integrations/native/user-feedback.md Documents Native feedback APIs.
introduction/getting-started/integrations/native/structured-reports.md Documents structured reports.
introduction/getting-started/integrations/native/README.md Adds the Native overview and platform table.
introduction/getting-started/integrations/native/migration.md Documents migration from legacy SDKs.
introduction/getting-started/integrations/native/macos.md Adds the macOS guide.
introduction/getting-started/integrations/native/linux.md Adds the Linux guide.
introduction/getting-started/integrations/native/ios.md Adds the iOS/tvOS guide.
introduction/getting-started/integrations/native/hang-detection.md Documents hang detection.
introduction/getting-started/integrations/native/crash-data-format.md Documents local report storage and retries.
introduction/getting-started/integrations/native/android.md Adds the Android guide.
introduction/getting-started/integrations/mobile/README.md Adds Native mobile guidance.
introduction/getting-started/integrations/mobile/ios.md Links the Native iOS guide.
introduction/getting-started/integrations/mobile/android.md Links the Native Android guide.
introduction/getting-started/integrations/downloads.md Adds Native downloads.
introduction/getting-started/integrations/desktop/README.md Adds Native desktop guidance.
introduction/getting-started/integrations/desktop/macos.md Adds a Native macOS pointer.
introduction/getting-started/integrations/desktop/linux.md Adds a Native Linux pointer.
introduction/getting-started/integrations/desktop/cplusplus/README.md Adds migration guidance.
introduction/development/web-services/user-feedback.md Adds SDK feedback guidance.
introduction/development/web-services/crash.md Documents Native crash endpoint fields.
education/faq/localized-support-responses-for-windows-c++-.net-and-macos.md Updates platform support messaging.
Review details

Suppressed comments (12)

introduction/development/web-services/crash.md:137

  • The new row says every Crashpad platform uses crashTypeId=5, but this documentation also defines structured reports (21), user feedback (36), and platform-specific ANR handling. Qualify this statement to native Crashpad minidumps so callers do not commit the wrong type for those report kinds.
| `environment` | The OS and hardware the app ran on, detected by the SDK and overridable (`Windows 11 10.0.26200 x64`, `Android 14 (API 34) arm64-v8a; Google Pixel 8`). Stored on the crash and shown on the crash page; every Crashpad platform posts with `crashTypeId=5`, so this is how platforms are told apart. Up to 255 characters. |

introduction/getting-started/integrations/desktop/cplusplus/README.md:8

  • The 8.x runtime inventory on this page includes BugSplatRc.dll, while the migration guide says that file is gone in 9.0. Describing the successor as keeping the same runtime file names is therefore inaccurate and can cause an incorrect installer migration.
This is the 8.x SDK. Its successor, [BugSplat Native 9.0](../../native/windows.md), keeps the same concepts and runtime file names on a cross-platform, out-of-process core; see [Migrating to 9.0](../../native/migration.md). 8.x keeps working and receives critical fixes.

introduction/getting-started/integrations/native/README.md:22

  • BugSplatMonitor is not present on iOS/tvOS, and Android packages libBugSplatMonitor.so rather than this executable. The table is introduced for desktop helpers, so this trailing claim should be limited to desktop platforms.
| `BugSplatMonitor` | Watches your process from outside. When it crashes, writes the dump (normal, heap or full), computes the crash signature, copies your attachments, and hands the report to the reporter. Same name on every platform. |

introduction/getting-started/integrations/native/android.md:4

  • The page description calls Android capture out of process, while the body says the monitor runs from the crashing process. Please keep the description consistent with the actual at-crash model so search results do not promise process isolation that Android cannot provide.
  BugSplat Native 9.0 on Android: at-crash out-of-process capture with
  libBugSplatMonitor.so, an in-app prompt on next launch, ANR import, Kotlin API.

introduction/getting-started/integrations/native/android.md:40

  • This promises a full dump for Android hangs, while the next bullet says heap and full memory dumps are unavailable on Android. Use the supported minidump terminology or explain the distinction so the guide does not promise an unavailable dump type.
* **Hang detection** pings the main `Looper`; a message that is not processed within the timeout is a hang (the ANR the OS would eventually report, caught earlier and with a full dump).

introduction/getting-started/integrations/native/crash-data-format.md:65

  • The retry policy classifies every rate-limit response as a permanent 4xx and deletes the report, but the endpoint documentation explicitly exposes HTTP 429 as Too Many Requests. Treating a transient throttle as terminal can discard crash data; keep rate-limited reports for a later retry instead.
Retry policy: an upload that succeeded, a permanent refusal (size limit, rate limit, 4xx) or three failed attempts delete the folder; a server error (500, 502, 503, 504) keeps it for the next launch.

introduction/getting-started/integrations/native/crash-data-format.md:44

  • The new Native store example uses crashTypeId: "1", but the Native endpoint section below says Crashpad reports use crashTypeId=5, and the migration guide also describes Native Apple reports as type 5. As written, readers can copy a legacy Windows.Native ID into a 9.0 report; change the example to the Native Crashpad ID or explicitly label it as legacy.
  "database": "fred", "appName": "MyApp", "appVersion": "1.0.0", "crashTypeId": "1",

introduction/getting-started/integrations/native/crash-data-format.md:65

  • This says a server error keeps the folder for the next launch, but result.json is described above as being written for every upload attempt (including failed) and line 63 defines pending as having no result.json. After a recorded 500/503, the report therefore cannot satisfy the stated pending predicate and will not be retried; clarify whether retryable failures omit result.json or remain pending despite it.
Retry policy: an upload that succeeded, a permanent refusal (size limit, rate limit, 4xx) or three failed attempts delete the folder; a server error (500, 502, 503, 504) keeps it for the next launch.

introduction/getting-started/integrations/native/crash-data-format.md:63

  • iOS/tvOS do not ship a monitor, so the universal “monitor and the SDK retry” wording is inaccurate for one of the documented platforms. Refer to the platform SDK, with the monitor/reporter only where applicable.
A report is pending when it has metadata, no `result.json`, and no live process working on it: a crash whose upload was interrupted, a report left by the `MANUAL` policy, a machine that was offline. On the next launch the monitor and the SDK retry; `bugsplat_pending_reports()` lists them for your own UI, `bugsplat_send_report()` uploads one (optionally with a new user, email or description), `bugsplat_discard_report()` deletes one, `bugsplat_post_pending_reports_async()` drains them in the background.

introduction/getting-started/integrations/native/ios.md:43

  • This says iOS hang detection produces a full dump, but the immediately following bullet says heap and full dumps are not available on iOS/tvOS. Remove the full-dump promise or document the actual in-process dump format.
* **Hang detection** pings the main dispatch queue; `hangDetection` produces a non-fatal report with a full dump while the app keeps running.

introduction/getting-started/integrations/native/migration.md:26

  • The existing 8.x API reference declares SetHangDetectionTimeout(int ms) and describes the argument as milliseconds (.../desktop/cplusplus/bugsplat-for-windows-api-documentation.md:134-144), so labeling the old method as taking seconds is misleading and can lead to a timeout 1,000 times too short. Use milliseconds in this mapping.
| `SetHangDetectionTimeout(seconds)` | `Options::HangDetection(ms, policy)` | `bugsplat_options_set_hang_detection` |

introduction/getting-started/integrations/native/windows.md:122

  • The existing full-memory-dump documentation requires account enablement and a per-version Full Dumps setting before full dumps are produced. This new paragraph presents BUGSPLAT_DUMP_FULL as immediately usable and only discusses the upload-size limit, so users can end up with a rejected or normal dump without the required server-side setup. Add that prerequisite or link the existing instructions.
The dump is written by DbgHelp while your process is suspended, so Visual Studio, WinDbg and BugSplat's .NET analysis see exactly what they see today. There is no client-side size gate: the server enforces your database's upload limit (100 MB by default; larger limits on Enterprise plans) when the reporter asks for the upload URL, and a refused report is logged as `rejected`. `BugSplatDotNet` defaults to `Heap` on Windows so managed frames resolve.
  • Files reviewed: 25/25 changed files
  • Comments generated: 11
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.


## From the SDKs

You do not need to speak this protocol yourself when you use a BugSplat SDK: [BugSplat Native 9.0](../../getting-started/integrations/native/user-feedback.md) (`bugsplat_post_feedback`, C++ `PostFeedback`, .NET `PostFeedback`), [macOS and iOS](../../getting-started/integrations/desktop/macos.md#user-feedback) (`postFeedback`) and [BugSplat for Windows](../../getting-started/integrations/desktop/cplusplus/#user-feedback) (`PostFeedback`) build and upload the report for you and return the crash id and support-response URL.
### Integrations

{% hint style="success" %}
**New: BugSplat Native 9.0** is one out-of-process SDK for Windows, macOS, Linux, Android and iOS/tvOS, with the same dialog, upload and support response everywhere. Windows is verified; the other platforms are being brought up. Start at [BugSplat Native](native/).
| `BugSplat.dll` / `libbugsplat.dylib` / `libbugsplat.so` | The library your app links: the C API, the report store, the uploader, structured reports, feedback, hang detection. |
| `BugSplatWer.dll` | Windows only: the Windows Error Reporting helper for fail-fast crashes. |

Capture, dump writing, the dialog and the upload all happen **out of your process**, so a crash that corrupts the heap, exhausts the stack or takes out the C runtime is still reported. On iOS and tvOS, where the OS forbids a helper process, capture is in process and the report is sent on the next launch.

Capture, dump writing, the dialog and the upload all happen **out of your process**, so a crash that corrupts the heap, exhausts the stack or takes out the C runtime is still reported. On iOS and tvOS, where the OS forbids a helper process, capture is in process and the report is sent on the next launch.

Initialization refuses to run without the monitor and reporter (`BUGSPLAT_ERR_MONITOR_NOT_FOUND`, `BUGSPLAT_ERR_REPORTER_NOT_FOUND`): a packaging mistake shows up on the developer's machine, not as silently missing crashes in the field.
| Windows (x64, x86, ARM64) | out of process; WER for fail-fast | `BugSplatReporter.exe`, Win32 | [Windows](windows.md) |
| macOS 13+ | out of process | `BugSplatReporter.app`, AppKit | [macOS](macos.md) |
| Linux (glibc 2.31+) | out of process | `BugSplatReporter`, GTK 3 or headless | [Linux](linux.md) |
| Android | out of process, at crash time | in-app prompt on next launch | [Android](android.md) |

# Hang Detection

A hang is a crash the operating system never reports: the main thread stops making progress and the user eventually force-quits. BugSplat Native detects hangs the same way on every platform and reports them as an out-of-process dump of the whole process, tagged `reportKind=hang`, through the same store, dialog and upload as a crash.
### Requirements 📋

* glibc 2.31 or later (Ubuntu 20.04, Debian 11, RHEL 9 and newer), x86-64 and aarch64.
* Runtime dependencies are loaded with `dlopen` and are optional: `libcurl.so.4` for uploads (present on every desktop distribution) and GTK 3 for the dialog. Without a display or GTK the reporter uploads headlessly, as if the policy were `QUIET`.
Some crashes never reach an in-process handler: `__fastfail`, `/GS` stack-buffer overruns, `RaiseFailFastException`, and the .NET runtime's own fail-fast after an unhandled managed exception. Windows Error Reporting handles those, and only calls a helper whose full path is allow-listed under `HKLM`. Your installer (running elevated) adds it once:

```
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\RuntimeExceptionHelperModules" /v "C:\Program Files\MyApp\BugSplatWer.dll" /t REG_DWORD /d 0
Comment on lines +117 to +119
bugsplat_options_set_dump_type(o, BUGSPLAT_DUMP_HEAP); /* private writable memory: CLR/GC/native heaps */
bugsplat_options_set_dump_type(o, BUGSPLAT_DUMP_FULL); /* every readable region */
bugsplat_options_set_minidump_flags(o, MiniDumpWithFullMemory | MiniDumpWithHandleData); /* raw MINIDUMP_TYPE */
Comment on lines +2 to +5
description: >-
BugSplat Native 9.0 is one out-of-process crash reporter for Windows, macOS,
Linux, Android, iOS and tvOS: the same dialog, upload path, support response
and crash-report format on every platform.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants