mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-11 09:40:42 +00:00
Use Sentry breadcrumbs to get wintab32.dll information
Useful to detect which vendor is causing most of the crashes related to wintab32.dll. Related to: https://github.com/aseprite/aseprite/issues/2785#issuecomment-1033222868
This commit is contained in:
parent
6277329176
commit
b561a6fbfb
2
laf
2
laf
@ -1 +1 @@
|
|||||||
Subproject commit 3bcdef56b27bec14aac39589e5fb78cf4e36184a
|
Subproject commit f006db9ed73e3f38610ae7b2fb4cd487e02a5038
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include "app/resource_finder.h"
|
#include "app/resource_finder.h"
|
||||||
#include "base/fs.h"
|
#include "base/fs.h"
|
||||||
|
#include "base/log.h"
|
||||||
#include "base/string.h"
|
#include "base/string.h"
|
||||||
#include "ver/info.h"
|
#include "ver/info.h"
|
||||||
|
|
||||||
@ -110,6 +111,33 @@ bool Sentry::areThereCrashesToReport()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
void Sentry::addBreadcrumb(const std::string& message)
|
||||||
|
{
|
||||||
|
LOG(VERBOSE, "BC: %s\n", message.c_str());
|
||||||
|
|
||||||
|
sentry_value_t c = sentry_value_new_breadcrumb(nullptr, message.c_str());
|
||||||
|
sentry_add_breadcrumb(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
void Sentry::addBreadcrumb(const std::string& message,
|
||||||
|
const std::map<std::string, std::string>& data)
|
||||||
|
{
|
||||||
|
LOG(VERBOSE, "BC: %s\n", message.c_str());
|
||||||
|
|
||||||
|
sentry_value_t c = sentry_value_new_breadcrumb(nullptr, message.c_str());
|
||||||
|
sentry_value_t d = sentry_value_new_object();
|
||||||
|
for (const auto& kv : data) {
|
||||||
|
LOG(VERBOSE, " - [%s]=%s\n", kv.first.c_str(), kv.second.c_str());
|
||||||
|
sentry_value_set_by_key(d,
|
||||||
|
kv.first.c_str(),
|
||||||
|
sentry_value_new_string(kv.second.c_str()));
|
||||||
|
}
|
||||||
|
sentry_value_set_by_key(c, "data", d);
|
||||||
|
sentry_add_breadcrumb(c);
|
||||||
|
}
|
||||||
|
|
||||||
void Sentry::setupDirs(sentry_options_t* options)
|
void Sentry::setupDirs(sentry_options_t* options)
|
||||||
{
|
{
|
||||||
// The expected handler executable name is aseprite_crashpad_handler (.exe)
|
// The expected handler executable name is aseprite_crashpad_handler (.exe)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2021 Igara Studio S.A.
|
// Copyright (C) 2021-2022 Igara Studio S.A.
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
// the End-User License Agreement for Aseprite.
|
// the End-User License Agreement for Aseprite.
|
||||||
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include "sentry.h"
|
#include "sentry.h"
|
||||||
|
|
||||||
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace app {
|
namespace app {
|
||||||
@ -33,6 +34,10 @@ public:
|
|||||||
// the "give consent" check box for first time.
|
// the "give consent" check box for first time.
|
||||||
static bool areThereCrashesToReport();
|
static bool areThereCrashesToReport();
|
||||||
|
|
||||||
|
static void addBreadcrumb(const std::string& message);
|
||||||
|
static void addBreadcrumb(const std::string& message,
|
||||||
|
const std::map<std::string, std::string>& data);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setupDirs(sentry_options_t* options);
|
void setupDirs(sentry_options_t* options);
|
||||||
|
|
||||||
|
@ -24,6 +24,10 @@
|
|||||||
|
|
||||||
#if ENABLE_SENTRY
|
#if ENABLE_SENTRY
|
||||||
#include "app/sentry_wrapper.h"
|
#include "app/sentry_wrapper.h"
|
||||||
|
#if LAF_WINDOWS
|
||||||
|
#define USE_SENTRY_BREADCRUMB_FOR_WINTAB 1
|
||||||
|
#include "os/win/wintab.h"
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#include "base/memory_dump.h"
|
#include "base/memory_dump.h"
|
||||||
#endif
|
#endif
|
||||||
@ -64,7 +68,31 @@ namespace {
|
|||||||
CoUninitialize();
|
CoUninitialize();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#endif
|
#endif // LAF_WINDOWS
|
||||||
|
|
||||||
|
#if USE_SENTRY_BREADCRUMB_FOR_WINTAB
|
||||||
|
// Delegate to write Wintab information as a Sentry breadcrumb (to
|
||||||
|
// know if there is a specific Wintab driver giving problems)
|
||||||
|
class WintabApiDelegate : public os::WintabAPI::Delegate {
|
||||||
|
bool m_done = false;
|
||||||
|
public:
|
||||||
|
WintabApiDelegate() {
|
||||||
|
os::instance()->setWintabDelegate(this);
|
||||||
|
}
|
||||||
|
~WintabApiDelegate() {
|
||||||
|
os::instance()->setWintabDelegate(nullptr);
|
||||||
|
}
|
||||||
|
void onWintabID(const std::string& id) override {
|
||||||
|
if (!m_done) {
|
||||||
|
m_done = true;
|
||||||
|
app::Sentry::addBreadcrumb("Wintab ID=" + id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void onWintabFields(const std::map<std::string, std::string>& fields) override {
|
||||||
|
app::Sentry::addBreadcrumb("Wintab DLL", fields);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif // USE_SENTRY_BREADCRUMB_FOR_WINTAB
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,6 +127,9 @@ int app_main(int argc, char* argv[])
|
|||||||
|
|
||||||
#if ENABLE_SENTRY
|
#if ENABLE_SENTRY
|
||||||
sentry.init();
|
sentry.init();
|
||||||
|
#if USE_SENTRY_BREADCRUMB_FOR_WINTAB
|
||||||
|
WintabApiDelegate wintabDelegate;
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
// Change the memory dump filename to save on disk (.dmp
|
// Change the memory dump filename to save on disk (.dmp
|
||||||
// file). Note: Only useful on Windows.
|
// file). Note: Only useful on Windows.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user