Skip to content

Latest commit

Β 

History

History

README.md

BugSplat for Windows (C++)

{% hint style="info" %} Need help upgrading from an older version of BugSplat? Check out our upgrade guide to get started. {% endhint %}

Overview πŸ‘€

This document explains how to modify your Microsoft Visual C++ application to provide full debug information to the BugSplat web application when it crashes.

Getting Started 🚦

To begin, download and unzip the BugSplat SDK for Microsoft Visual C++.

To get a feel for the BugSplat service before enabling your application, feel free to experiment with the MyConsoleCrasher sample application, which is included as part of the software development kit and is also available on GitHub.

Integration πŸ—οΈ

{% hint style="warning" %} For WinUI 3 applications, BugSplat must be registered as a WER RuntimeExceptionModule. This process is demonstrated in the MyWinUI3Crasher sample, which is available in the SDK and on GitHub. {% endhint %}

Add BugSplat to your application using the following steps:

  1. Link with BugSplat.lib by adding an entry to Linker > Input > Additional Dependencies.
  2. Add BugSplatMonitor.exe, BugSplatWer.dll, and BugSplatRc.dll to your application's installer.
  3. Ensure your installer runs with Administrator privileges and creates a RuntimeExceptionHelperModules registry key with a name containing the full path to BugSplatWer.dll. For more information about configuring WER see this doc.

  1. Include BugSplat.h in your application's source.
  2. Create an instance of BugSplat following the example in MyConsoleCrasher. The BugSplat constructor requires three parameters: database, application, and version. A new BugSplat database can be created on the Database page. Choose values for application name and version to match your product release. These same values are typically used when uploading symbol files for your application. Learn more about symbol uploads at symbol-upload.
#include "BugSplat.h"

BugSplat g_BugSplat(BUGSPLAT_DATABASE, APPLICATION_NAME, APPLICATION_VERSION);
  1. Modify your build settings so that symbol files are created for release builds. Set C/C++ > General > Debug Information Format to Program Database /Zi. Be sure to also set Linker > Debugging > Generate Debug Info to Yes (/DEBUG).
  2. Configure a Post-Build step to upload your application's symbol files. Your script should authenticate using OAuth Client Credentials. You can create credentials on the Integrations page under the OAuth tab.
symbol-upload-windows.exe -b your-database -a your-app -v your-version -i your-client-id -s your-client-secret -d "$(OutputDir)\"

{% hint style="info" %} To get complete symbolicated call stacks and variable names for each crash, you should upload all .exe, .dll, and .pdb files for your product every time you build a release version of your application for distribution or internal testing. {% endhint %}

Verification βœ…

Test your application by forcing a crash.

*(volatile int *)0 = 0;

Verify that the BugSplat dialog appears, and that crashes are posted to your BugSplat account. Ensure that symbol names in the call stack are resolved correctly. If they aren’t, double-check that the correct version of symbol files and all executables for your application have been uploaded to BugSplat.

If everything was configured correctly, you should see a crash report that looks like this in your BugSplat database.

BugSplat Crash Page

BugSplat Crash Page

Crash Dialog

Instructions for modifying the default crash dialog can be found on the Windows Dialog Box page.

User Feedback

In addition to crash reporting, BugSplat supports collecting non-crashing user feedback such as bug reports and feature requests. Feedback reports appear in BugSplat with the "User Feedback" type, grouped by title.

Set user details and an application key, then call PostFeedback on your BugSplat instance:

g_BugSplat.SetUser(L"Jane");
g_BugSplat.SetEmail(L"jane@example.com");
g_BugSplat.SetKey(L"en-US");

bool success = g_BugSplat.PostFeedback(L"Login button broken", L"Nothing happens when I tap it");

To include file attachments such as screenshots or log files:

std::vector<const wchar_t*> attachments = {
    L"C:\\path\\to\\screenshot.png",
    L"C:\\path\\to\\log.txt"
};
bool success = g_BugSplat.PostFeedback(L"Login button broken", L"Nothing happens when I tap it", attachments);

You can also add attachments individually with AddAttachment() before calling PostFeedback(). All attachments passed to PostFeedback are cleared after each feedback upload whereas attachments added via AddAttachment() are added the current report and future reports during the current session.

Dependencies

See technology dependencies on our dependencies page.