LogoLogo
HomePlatform IntegrationsDownloadsLogin
  • Welcome
  • 📌Introduction
    • Getting Started
      • Signing Up
      • Creating a Database
      • Platform Integrations
        • 💻Desktop
          • BugSplat Crash Reporting Library for Windows (Native C++)
            • Full Memory Dumps
            • Windows (Native C++) Dependencies
          • Windows (.NET Framework)
          • macOS
          • Linux
        • 🔀Cross-Platform
          • .NET Standard
          • Breakpad (Deprecated)
          • Crashpad
            • How to Build Google Crashpad
          • Deno
          • Electron
          • Java
          • Node.js
          • Python
          • Qt
        • 🎮Game Development
          • CRYENGINE
          • Nintendo Switch
          • PlayStation
          • Unreal Engine
            • Unreal Engine Plugin
          • Unity
          • Xbox
        • 📱Mobile
          • Android
          • Ionic
          • iOS
          • React Native
        • 🕸️Web
          • Angular
          • JavaScript
          • React
          • Vue
        • ⌛Downloads
      • Platform Samples
        • BugSplatTester (iOS)
        • BugSplatTester (macOS)
        • myConsoleCrasher (C++)
          • Address Sanitizer Reports
        • my-android-crasher
        • my-angular-crasher
        • my-electron-crasher
        • my-java-crasher
        • my-node-crasher
        • my-qt-crasher
        • my-react-crasher
        • my-unity-crasher
        • my-unreal-crasher
      • Inviting Team Members
      • Importing Crashes
      • Troubleshooting
      • Quickly Submitting Your First Crash in Under 5 Minutes
    • Development
      • Using the App
      • Symbol Files
        • Common Symbols
        • How to Manually Upload Symbols
        • Source Maps
        • Symbol Servers
        • Working with Symbol Files in Windows Environments
      • Searching
        • Table Filtering
        • Table Grouping
      • Grouping Crashes
      • Commenting
      • Integrations and Third Party Tools
        • Configurable Alerts
          • Slack
          • Microsoft Teams
          • Discord
          • Email
          • Webhook
        • Issue Trackers
          • Azure DevOps
          • Favro
          • Jira
          • GitHub Issues
          • GitLab
          • Monday.com
          • YouTrack
          • Auto-Creating Defects from BugSplat Databases in Attached Third-Party Issue Trackers
      • API
        • Web Application Endpoints
          • Charting
          • Company
          • Crash
          • Crashes
          • Crash Groups
          • Databases
          • Defect
          • Events
          • Import/Migrate
          • Support Response
          • User (GDPR)
          • Users
          • Versions
        • Crash Post Endpoints
        • OAuth2
        • Defect Tracker Options
        • Paging, Filtering, and Grouping
        • Platform Specific API's
          • C++ Native API
          • .NET API
    • Production
      • Versions
      • 🆕Regression Alerts
      • Security and Compliance
        • Security Program
        • BugSplat Security Program Inquirys
        • SOC 2
        • GDPR & UK GDPR Compliance
        • Avoid Collecting Personally Identifiable Information (PII)
        • Crash Expiry
        • Terms
        • Privacy Policy
      • Support Responses
      • BugSplat Status
  • 🍎Education
    • BugSplat Terminology
    • How-Tos
      • Creating Defects
      • Contacting End-Users
      • Crash Dialog Branding
      • Reprocess Crashes
      • Batch Reprocess Crashes
      • Using the Crash Attribute Feature
      • Send Feedback
      • Remove Crashes
    • Videos
      • BugSplat Product Walkthrough
    • FAQs
      • How Do I Upload Crashes with Python?
      • How Do I Remove Symbol Files?
      • Crash details 'Active Thread'
      • How long does it take to process a crash?
      • How BugSplat handles large crash volumes
      • How Does Crash Rate Limiting Work?
      • Add Custom Branding to Support Response
      • Finding Missing Reports
      • Using Dark Mode
      • What If My App or Game Grows Quickly?
      • Does BugSplat have an effect on application performance?
      • Manually Upload Crash Reports to BugSplat
      • How to configure proxy settings in BugSplat
      • Using BugSplat's public database
      • How to Upload Symbol Files with Symbol-Upload
      • Using SendPdbs to Automatically Upload Symbol Files
      • Managing Symbol Space
      • Why Group Crashes?
      • Uploading third-party DLLs without PDB files
      • Localized Support Responses for Windows C++, .NET, and macOS
      • BugSplat application uptime data
        • What are the upload size considerations with BugSplat accounts.
      • Is an application's source code safe when using BugSplat?
      • How to get correct callstacks with BugSplat in Steam
      • What is a crash reporter?
      • Common End-User Questions
        • Missing BugSplat.dll
        • What should I do if I get a BugSplat?
        • What is BsSndRpt.exe?
        • My software just crashed. Should I contact BugSplat for help?
  • 🏢Administration
    • Billing
      • Free Trial Overview
      • Plans and Billing Overview
      • How to Sign Up for a BugSplat Plan
      • Viewing Account Usage
      • Upgrading, Changing, or Canceling Your Plan
        • Upgrading or Downgrading Your Plan
        • Adding Additional Crashes and Storage Space
        • Updating Credit Card and Billing Information and Viewing Billing History
        • Updating Tax and VAT Information
        • Canceling Your Plan
      • Free and Discounted Plans
        • Free Plan Overview
        • Free Crash Reporting for Indie Game Development
        • Education
        • Open-Source
        • Good Causes
      • Plans, Upgrades, and Payments FAQ
        • Fair-Refund Policy
        • Update to Our Legacy Plans Guide
        • Updates to BugSplat Pricing Plans - March 2024
        • Using Coupons and Promotions at BugSplat
        • What is 'High Volume Fractional Crash Processing'?
    • Account
      • Migrating Databases
      • Deleting Databases
      • Deleting a Company Account
      • Changing Company Name
    • User Management
      • User Permissions
      • Deleting a User
      • Requesting Access
      • Login Page and Options
      • Password Settings and Reset Options
        • Required Password Reset - August 4th, 2023
      • Single Sign-On (SSO)
      • Multi-Factor Authentication (MFA)
      • Enforce MFA
      • Adding New Users in Companies with Multiple Databases
    • Contact us
  • 🐛About
    • What is BugSplat?
    • Why BugSplat?
    • Who is BugSplat?
      • Our Values
      • Charitable Giving
      • Brand Guidelines
    • Partnerships
    • Misc
      • Promotions
        • March 2024 - Game Developer Free Months of Service
      • Giveaways
        • April 8 - April 22, 2025
        • Feb 18 - March 17, 2025
        • Jan 15 - Feb 13, 2025
        • December 19-29, 2024
        • November 21–28, 2024
        • October 17-24th, 2024
        • September 19-26th, 2024
        • July 18 - July 23, 2024
        • April 18 - May 12, 2024
        • March 18 - April 03, 2024
        • November 15-30, 2023
        • October 9-23, 2023
  • 🔀Changelog
    • Changelog
Powered by GitBook
On this page
  • Overview
  • Auto-Group Rules
  • Options
  • Crashes Page
  • Crash Page
  • Summary Page

Was this helpful?

  1. Introduction
  2. Development

Grouping Crashes

PreviousTable GroupingNextCommenting

Last updated 7 months ago

Was this helpful?

Overview

Deciding which crashes your team should focus on can seem daunting. For many applications, it's impossible to investigate every crash. Fortunately, BugSplat automatically groups similar crashes, allowing you to concentrate your efforts on the bugs causing the most instability.

BugSplat's page is a table of crash groups. Usually, crash reports are grouped by the top stack frame when the application crashes. However, sometimes the top of a stack contains common code that causes unrelated crashes to be grouped together. When this happens, auto-group rules can automatically select a lower stack frame that more accurately groups related crashes.

Auto-Group Rules

BugSplat has a set of customizable rules that skip over functions that are typically not interesting to application developers. Our default rules are designed to get you started quickly and can be modified as required for each crash report database.

The auto-group rules are pattern-based matching rules that skip irrelevant stack frames and create more meaningful crash groups. The three types of rules are group by, ignore, and ignore frames up to and including. Rules are defined per platform and can be specified to match either the function or file portion of the call stack.

You can view and change Auto-Group rules on the page.

Let's look at how BugSplat groups a report with the Windows OS function KERNELBASE!RaiseException at the top of the stack. Our default rule is shown below:

By default, BugSplat groups crashes by the function at the top of the call stack. When BugSplat processes reports containing KERNELBASE!RaiseException at the top of the stack, the ignore rule matches and crashes will automatically be grouped by the following frame of the call stack. To group deeper in the call stack, you can combine multiple ignore rules. Alternatively, you can use ignore frames up to and including rules to group after a specified pattern that matches anywhere in the call stack. Ignore rules are useful for excluding frames that are known to be common error conditions.

Developers can also add rules that group by frames matching certain patterns. Group by rules are useful for including items that can be identified as belonging to your application. For example, you might choose group by to specify a file matching a path on your build machine, or a function matching your main application's module.

Pattern
Description
Example
Matches
Does not match

*

matches any number of any characters including none

Law*

Law, Laws, or Lawyer

**

matches any number of path/directory segments. When used must be the only contents of a segment.

/**/some.*

/foo/bar/bah/some.txt, /some.txt, or /foo/some.txt

?

matches any single character

?at

Cat, cat, Bat or bat

at

[abc]

matches one character given in the bracket

[CB]at

Cat or Bat

cat or bat

[a-z]

matches one character from the range given in the bracket

Letter[0-9]

Letter0, Letter1, Letter2 up to Letter9

Letters, Letter or Letter10

[!abc]

matches one character that is not given in the bracket

[!C]at

Bat, bat, or cat

Cat

[!a-z]

matches one character that is not from the range given in the bracket

Letter[!3-5]

Letter1, Letter2, Letter6 up to Letter9 and Letterx etc.

Letter3, Letter4, Letter5 or Letterxx

Auto-group rules are processed in a specific, consistent order that cannot be changed. The rules engine follows the logic below:

  • If there are any group by rule matches, select the top-most matching frame as the candidate frame. Use the resulting frame for grouping. Don't process any more rules.

  • If there are any ignore frames up to and including rule matches, select the lower-most matching frame as the candidate frame. Starting with the candidate frame, skip over any frames that match the ignore rules until a frame that doesn't match any ignore rules is found. Use the resulting frame for grouping. Don't process any more rules.

  • At this point, neither group by nor group after rules matched any stack frames. The rules engine will apply the ignore rules starting with the top stack frame, skipping over any frames that match the ignore rules until it finds the first frame that isn't to be ignored. The resulting frame is used for grouping.

Options

The module name is the name of the library or executable that added the frame to the stack. The line number is the line of source code where the function crashed, and the address offset is the instruction pointer offset. The hex offset is only considered for grouping stack frames that are not symbolicated.

With all settings enabled, groups would be created by a match on the entire string MyConsoleCrasher!Crash(42), where MyConsoleCrasher is the module name, and 42 is the line number. A group would also be created by a full match on the unsymbolicated frame MyConsoleCrasher!Crash+0xfff, where 0xfff is the address offset. With all options disabled groups would be created by a match on just the function name Crash.

Crashes Page

Crash Page

On the Crash page, scroll down to the list of stack frames for the crashing thread. Notice that we didn't quite get our grouping rules correct. Our rules have caused the report to be grouped under the function in bold, MyConsoleCrasher!_CxxThrowException. The function we actually want to group on is MyConsoleCrasher!ThrowByUser. Expand the row containing MyConsoleCrasher!ThrowByUser to reveal the Group Rules button.

We can click Group Rules and add another rule that ignores frames up to and including stack frames where the function matches the glob *_CXXThrowException*. After creating this rule and reprocessing the crash report, you will see the correct grouping.

Summary Page

Auto-Group rules are matched via . The following table describes common glob patterns.

When you specify a new Auto-Group rule, it will be applied to newly processed and reprocessed crashes only. If you'd like to batch reprocess crashes to apply new rules, please contact .

BugSplat can also ignore specific parts of the call stack when creating groups. By default, BugSplat will group items that match based on function name only. At the top of the page you'll find the options include module name, include line number, and include address offset. Enabling these settings will include the respective properties in the group calculation.

The page displays a list of reports and their associated group under the Stack Key column. We've added a rule that effectively skips KERNELBASE!RaiseException and the reports are now grouped by the next frame in the stack MyConsoleCrasher!_CxxThrowException(75). To see the report's stack trace, click the value in the ID column.

Once new grouping rules have been applied, navigate to the page to view an overview of groups in the selected database. The Summary page provides report counts for all of the various groups. Targeting groups with the highest report Count will generally give teams the best return on their efforts. Another interesting metric to target is Users Affected, which represents the number of unique users that ran into a specific problem during the selected time frame.

📌
glob patterns
Support
Rules
Crashes
Summary
Summary
Rules
Default Ignore Rule
Crash Page
Crash Page with Stack Frame Expanded
Summary Page