/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once namespace Core { class Launcher; } // namespace Core namespace CrashReports { QString PlatformString(); #ifndef TDESKTOP_DISABLE_CRASH_REPORTS struct dump { ~dump(); }; const dump &operator<<(const dump &stream, const char *str); const dump &operator<<(const dump &stream, const wchar_t *str); const dump &operator<<(const dump &stream, int num); const dump &operator<<(const dump &stream, unsigned int num); const dump &operator<<(const dump &stream, unsigned long num); const dump &operator<<(const dump &stream, unsigned long long num); const dump &operator<<(const dump &stream, double num); #endif // TDESKTOP_DISABLE_CRASH_REPORTS enum Status { CantOpen, Started }; // Open status or crash report dump. using StartResult = base::variant; StartResult Start(); Status Restart(); // can be only CantOpen or Started void Finish(); void SetAnnotation(const std::string &key, const QString &value); void SetAnnotationHex(const std::string &key, const QString &value); inline void ClearAnnotation(const std::string &key) { SetAnnotation(key, QString()); } // Remembers value pointer and tries to add the value to the crash report. // Attention! You should call clearCrashAnnotationRef(key) before destroying value. void SetAnnotationRef(const std::string &key, const QString *valuePtr); inline void ClearAnnotationRef(const std::string &key) { SetAnnotationRef(key, nullptr); } void StartCatching(not_null launcher); void FinishCatching(); } // namespace CrashReports namespace base { namespace assertion { inline void log(const char *message, const char *file, int line) { const auto info = QStringLiteral("%1 %2:%3" ).arg(message ).arg(file ).arg(line ); const auto entry = QStringLiteral("Assertion Failed! ") + info; #ifdef LOG LOG((entry)); #endif // LOG CrashReports::SetAnnotation("Assertion", info); } } // namespace assertion } // namespace base