Electron Crash Reporting Server

Application crashes are a serious concern that should be on every Electron developer’s radar. No matter your level of expertise, you’ll want to know when crashes impact your users and make sure you have the necessary data to (have someone) fix the issue. Luckily, Electron has built-in facilities to generate and submit crash reports across supported platforms through Breakpad, Crashpad, and Electron’s crashReporter API.

But what options do you have available for a crash reporting server? Look no further: in this post, we’ll show you how to get up and running quickly with Backtrace & Electron and demonstrate our unique feature set that makes Backtrace the best crash reporting option for Electron.

Overview

The core values we address with our Electron crash reporting server are simple but powerful:

  • Start collecting crash data in minutes.
  • Answer the most urgent questions about your crashes with enhanced crash data.
  • “No hassle” symbol management—seamlessly get callstacks with function names.
  • Augment your workflow management tools with crash data.

In this blog post, we describe in depth how Electron users can start benefiting from our crash reporting server.

Signup & Setup

First, go to https://backtrace.io/create to signup for a free 30-day trial. This will spawn an instance of Backtrace to send your crash reports to. You’ll be asked to setup a password and login. Once you login, you’ll be guided through our setup process to create a project.

 

Next up, pointing Electron’s crashReporter to Backtrace:

 

Point your Electron App to Backtrace

As seen above, if you select Electron in our integration guide, you’ll see sample code that contains everything you need. Ensure that you’ve imported the crashReporter module, paste the sample code, and then crash your App. That’s it: a simple change to submitURL and all of your Electron crashes will be reported to Backtrace.

 

Enhance Crash Data with Attributes

For extra points, you can add additional data to your crashes via the extra object. In Backtrace, we call extra parameters attributes and it’s a way to add additional context to your crashes. Attributes are an incredibly powerful construct in Backtrace that let you search your crash data in complex ways. Electron reports a number of attributes by default, such as the version of Electron, the platform/OS, the process_type reporting a crash, and the configured product and company name. You’ll need to register these attributes to the Backtrace system by following the setup dialogue at the top of the project overview page or following the guide here. More information on extra is available on the crashReporter documentation page.

 

Watch the Human-Readable Crashes Come In

As long as you follow the guidelines on the crashReport Documentation page, you’ll see crashes come in from all of your processes. It’s important to note that you need to call crashReporter.start() in each process that you want to collect crash reports from. For this post, we’ll set a simple delay and call process.crash() in main.js using the following code:
Seconds later, I see a crash in Backtrace. I can click on “view details” and then click on “view” to see the contents of the crash report.
 

Dynamic Symbol Download

Notice how we didn’t mention anything about symbols?! That’s because Backtrace has built-in dynamic symbol download and management support. Backtrace will retrieve relevant Electron symbols automatically, on-demand. With no effort on your part, you get callstacks with function names. Out of the box, we integrate into Electron, Microsoft, and Firefox symbol servers so you don’t have to worry about the headache of managing symbols. Backtrace also includes a fully functional symbol management system, letting you upload symbols for your custom native code.

 

Backtrace retrieves and applies relevant Electron symbols automatically. With no effort on your part, you get callstacks with function names.

 

Enhanced Workflows & Advanced Analysis

Things don’t stop there. Once the crash reports start rolling you, you’ll be able to use Backtrace to fully capture, understand, and manage your complete crash set.

 

Backtrace workflow integrations let you automate your crash management process by sending you notifications, filing tickets, and integrating into your existing monitoring systems. Our Query Builder interface lets you filter, facet, and aggregate crashes on key data points. Scheduled reports give you a powerful way to understand your crash trends and the instability of your application. More information on these features is available in our latest product update post.

Conclusion

If you’re building an Electron app and you’re looking for an Electron crash reporting server, look no further. Backtrace will not only collect your Electron crash reports, it will:

 

  • Automatically download and manage relevant symbols
  • Let you explore your crash data via queries and scheduled reports
  • Integrate into your existing workflow via Slack, JIRA, and much more
Get back to the real work of building great native applications and use Backtrace today.
By | 2017-10-05T16:23:13+00:00 October 5th, 2017|Backtrace, Technical Details|
window.addEventListener('load',function(){ var set_int = setInterval(function(){ if(jQuery('.backtrace-create-component:contains("Your account was created. Check your email to begin integrating with Backtrace.")').is(":visible")) || (jQuery('.backtrace-create-component:contains("Your account was created. Please click on the login button below to begin integrating with Backtrace.")').is(":visible")) { dataLayer.push({'event' : 'formSubmitted', 'formName' : 'SignUpSuccess'}) clearInterval(set_int); } }, 1000) }) window.addEventListener('load',function(){ var set_int = setInterval(function(){ if(jQuery('.backtrace-create-component:contains("Your account was created. Check your email to begin integrating with Backtrace.")').is(":visible")) || (jQuery('.backtrace-create-component:contains("Your account was created. Please click on the login button below to begin integrating with Backtrace.")').is(":visible")) {ga('send','event','form','submit','register') clearInterval(set_int); } }, 1000) })