C++ support with Google Breakpad

Hi there,

I’m posting here to try to capture the interest of the community in providing C++ support through google breakpad. This would work for Qt applications or anything native, and actually also Android NDK code or iOS apps as well.

We’ve been using Sentry in a funky way but that has proven very successful for us. Our crash handler is written with Google Breakpad, so when a crash happen we capture a minidump file which then gets sent to one of our server. Then we do the offline symbolication using a variation of socorro/minidump-stackwalk (through a C++ python binding that wraps the breakpad code which has zero dependencies, that we could open-source), and create a JSON message out of this like any raven/client would do, which we then send to sentry.

This is a lot of custom code that could live in Sentry itself and benefits others, if there is a desire to do so. It would mean that Sentry would need to work with breakpad symbol files and minidump. Given that Sentry already has very nice iOS support, there should be a lot of existing plumbing code in there that would have to be adapted to support another symbolication + native dump family.

Love it, hate it, any thoughts ?
Thanks !

  • Benjamin
2 Likes

Love it for sure! We might have to look a bit over how to best integrate the minidumps into it and how to map some symbols but I would love to get something like this in.

If you want to discuss this, feel free to hit me up at armin@sentry.io

There is certainly a need for this for electron apps too. We already use sentry for our JavaScript errors and need to catch any potential native crashes too.

I was going to combine a few open source nodejs projects, put it on a server and hopefully have it automatically pull the symbols using electron-download and pass the decoded stack traces on to sentry.

Hey Tim, I don’t exactly know how electron work, but I know that chrome has different crash handlers tech depending on the platform; it either uses google crashpad or google breakpad.

For google breakpad we actually open-sourced our symbolication code (what you call decoding) which we’ve put up on GitHub here -> https://github.com/machinezone/stackwalker
That python module is a C++ based one, which compute a backtrace from a symbol file and a dump file.

Did a super quick search and I found this issue
https://github.com/electron/electron/issues/10000 which shows that someone can get a mini dump out of google breakpad.

I’m testing this incomplete code:
https://github.com/timfish/electron-native-crash-forward

So far it forwards electron native crashes to a supplied sentry dsn after attempting some stack decoding using the electron symbol files.

It has some major missing features:

  • Only passes the crashed thread stack trace to sentry whereas it looks like the API supports multiple threads
  • Does not save the dump file anywhere

Integration into sentry with symbols files in artifacts would be great!