getsentry / sentry-native

Sentry SDK for C, C++ and native applications.
MIT License
403 stars 170 forks source link

Docs: Clarify inproc vs breakpad trade-offs #1070

Closed bruno-garcia closed 2 weeks ago

bruno-garcia commented 3 weeks ago

In the docs we say:

Breakpad and inproc both run "in-process", so they run in the same process as the application they capture crashes for. This means these backends can't send a crash to Sentry immediately after it happens. Instead, the crash report is written to disk and sent the next time the application is run. Since Crashpad runs in a different process it doesn't have this limitation.

But it doesn't help one understand the trade offs between inproc and breakpad. When should I use one over the other? Any quirks depending on which platform I'm running?

How does in-proc work on each platform? For example does it use MiniDumpWriteDump on Windows?

vaind commented 3 weeks ago

possible duplicate of #908

supervacuus commented 3 weeks ago

But it doesn't help one understand the trade offs between inproc and breakpad. When should I use one over the other? Any quirks depending on which platform I'm running?

This question is indeed a duplicate of #908.

How does in-proc work on each platform? For example does it use MiniDumpWriteDump on Windows?

I have yet to see a use case where breakpad would be less convenient for users than inproc. The primary use-case for inproc is Android, and here, mainly because we use a fork of the platform-unwinder libunwindstack (both with considerable issues of their own, as documented in multiple places). Due to the low usage outside Android, the backend is the least maintained.

bruno-garcia commented 3 weeks ago

Thanks for that reply.

That information, combined with this reply is I believe very detailed and should help us make the right call.

I strongly believe that all of these details belong on the docs. They are indeed very deep and technical and I don't expect the average engineer to need to dig into them. But many Sentry users are not average engineers and will wonder "Why are my abort() not working on platform X using plugin Y?" We could point folks to those details.