diff options
| -rw-r--r-- | 3rdParty/Breakpad/01_breakpad_filename_prefix.diff | 66 | ||||
| -rw-r--r-- | 3rdParty/Breakpad/src/client/windows/handler/exception_handler.cc | 6 | ||||
| -rw-r--r-- | 3rdParty/Breakpad/src/client/windows/handler/exception_handler.h | 10 | ||||
| -rw-r--r-- | SwifTools/CrashReporter.cpp | 8 | ||||
| -rw-r--r-- | SwifTools/CrashReporter.h | 2 | ||||
| -rw-r--r-- | Swift/QtUI/main.cpp | 17 | 
6 files changed, 100 insertions, 9 deletions
| diff --git a/3rdParty/Breakpad/01_breakpad_filename_prefix.diff b/3rdParty/Breakpad/01_breakpad_filename_prefix.diff new file mode 100644 index 0000000..b63180d --- /dev/null +++ b/3rdParty/Breakpad/01_breakpad_filename_prefix.diff @@ -0,0 +1,66 @@ +diff --git a/3rdParty/Breakpad/src/client/windows/handler/exception_handler.cc b/3rdParty/Breakpad/src/client/windows/handler/exception_handler.cc +index 6e5b724..272ca5f 100644 +--- a/3rdParty/Breakpad/src/client/windows/handler/exception_handler.cc ++++ b/3rdParty/Breakpad/src/client/windows/handler/exception_handler.cc +@@ -124,6 +124,7 @@ void ExceptionHandler::Initialize(const wstring& dump_path, +   callback_ = callback; +   callback_context_ = callback_context; +   dump_path_c_ = NULL; ++  dump_filename_prefix_c_ = NULL; +   next_minidump_id_c_ = NULL; +   next_minidump_path_c_ = NULL; +   dbghelp_module_ = NULL; +@@ -217,6 +218,7 @@ void ExceptionHandler::Initialize(const wstring& dump_path, +  +     // set_dump_path calls UpdateNextID.  This sets up all of the path and id +     // strings, and their equivalent c_str pointers. ++    set_dump_filename_prefix(wstring()); +     set_dump_path(dump_path); +   } +  +@@ -914,8 +916,8 @@ void ExceptionHandler::UpdateNextID() { +   next_minidump_id_c_ = next_minidump_id_.c_str(); +  +   wchar_t minidump_path[MAX_PATH]; +-  swprintf(minidump_path, MAX_PATH, L"%s\\%s.dmp", +-           dump_path_c_, next_minidump_id_c_); ++  swprintf(minidump_path, MAX_PATH, L"%s\\%s%s.dmp", ++           dump_path_c_, dump_filename_prefix_c_, next_minidump_id_c_); +  +   // remove when VC++7.1 is no longer supported +   minidump_path[MAX_PATH - 1] = L'\0'; +diff --git a/3rdParty/Breakpad/src/client/windows/handler/exception_handler.h b/3rdParty/Breakpad/src/client/windows/handler/exception_handler.h +index 09f5177..6f59348 100644 +--- a/3rdParty/Breakpad/src/client/windows/handler/exception_handler.h ++++ b/3rdParty/Breakpad/src/client/windows/handler/exception_handler.h +@@ -188,6 +188,12 @@ class ExceptionHandler { +     UpdateNextID();  // Necessary to put dump_path_ in next_minidump_path_. +   } +  ++  void set_dump_filename_prefix(const wstring& dump_prefix) { ++    dump_filename_prefix_ = dump_prefix; ++    dump_filename_prefix_c_ = dump_filename_prefix_.c_str(); ++    UpdateNextID(); ++  } ++ +   // Requests that a previously reported crash be uploaded. +   bool RequestUpload(DWORD crash_id); +  +@@ -313,6 +319,9 @@ class ExceptionHandler { +   // argument to the constructor, or set_dump_path. +   wstring dump_path_; +  ++  // The filename prefix used for the minidump files. ++  wstring dump_filename_prefix_; ++ +   // The basename of the next minidump to be written, without the extension. +   wstring next_minidump_id_; +  +@@ -327,6 +336,7 @@ class ExceptionHandler { +   // should be equivalent to the lifetimes of the associated wstring, provided +   // that the wstrings are not altered. +   const wchar_t* dump_path_c_; ++  const wchar_t* dump_filename_prefix_c_; +   const wchar_t* next_minidump_id_c_; +   const wchar_t* next_minidump_path_c_; +  diff --git a/3rdParty/Breakpad/src/client/windows/handler/exception_handler.cc b/3rdParty/Breakpad/src/client/windows/handler/exception_handler.cc index 6e5b724..272ca5f 100644 --- a/3rdParty/Breakpad/src/client/windows/handler/exception_handler.cc +++ b/3rdParty/Breakpad/src/client/windows/handler/exception_handler.cc @@ -124,6 +124,7 @@ void ExceptionHandler::Initialize(const wstring& dump_path,    callback_ = callback;    callback_context_ = callback_context;    dump_path_c_ = NULL; +  dump_filename_prefix_c_ = NULL;    next_minidump_id_c_ = NULL;    next_minidump_path_c_ = NULL;    dbghelp_module_ = NULL; @@ -217,6 +218,7 @@ void ExceptionHandler::Initialize(const wstring& dump_path,      // set_dump_path calls UpdateNextID.  This sets up all of the path and id      // strings, and their equivalent c_str pointers. +    set_dump_filename_prefix(wstring());      set_dump_path(dump_path);    } @@ -914,8 +916,8 @@ void ExceptionHandler::UpdateNextID() {    next_minidump_id_c_ = next_minidump_id_.c_str();    wchar_t minidump_path[MAX_PATH]; -  swprintf(minidump_path, MAX_PATH, L"%s\\%s.dmp", -           dump_path_c_, next_minidump_id_c_); +  swprintf(minidump_path, MAX_PATH, L"%s\\%s%s.dmp", +           dump_path_c_, dump_filename_prefix_c_, next_minidump_id_c_);    // remove when VC++7.1 is no longer supported    minidump_path[MAX_PATH - 1] = L'\0'; diff --git a/3rdParty/Breakpad/src/client/windows/handler/exception_handler.h b/3rdParty/Breakpad/src/client/windows/handler/exception_handler.h index 09f5177..6f59348 100644 --- a/3rdParty/Breakpad/src/client/windows/handler/exception_handler.h +++ b/3rdParty/Breakpad/src/client/windows/handler/exception_handler.h @@ -188,6 +188,12 @@ class ExceptionHandler {      UpdateNextID();  // Necessary to put dump_path_ in next_minidump_path_.    } +  void set_dump_filename_prefix(const wstring& dump_prefix) { +    dump_filename_prefix_ = dump_prefix; +    dump_filename_prefix_c_ = dump_filename_prefix_.c_str(); +    UpdateNextID(); +  } +    // Requests that a previously reported crash be uploaded.    bool RequestUpload(DWORD crash_id); @@ -313,6 +319,9 @@ class ExceptionHandler {    // argument to the constructor, or set_dump_path.    wstring dump_path_; +  // The filename prefix used for the minidump files. +  wstring dump_filename_prefix_; +    // The basename of the next minidump to be written, without the extension.    wstring next_minidump_id_; @@ -327,6 +336,7 @@ class ExceptionHandler {    // should be equivalent to the lifetimes of the associated wstring, provided    // that the wstrings are not altered.    const wchar_t* dump_path_c_; +  const wchar_t* dump_filename_prefix_c_;    const wchar_t* next_minidump_id_c_;    const wchar_t* next_minidump_path_c_; diff --git a/SwifTools/CrashReporter.cpp b/SwifTools/CrashReporter.cpp index 15b5cd0..bf637c8 100644 --- a/SwifTools/CrashReporter.cpp +++ b/SwifTools/CrashReporter.cpp @@ -5,10 +5,11 @@   */  #include <Swiften/Base/Log.h> -#include <SwifTools/CrashReporter.h>  #include <Swiften/Base/Platform.h>  #include <Swiften/Base/Path.h> +#include <SwifTools/CrashReporter.h> +  #if defined(HAVE_BREAKPAD)  #pragma GCC diagnostic ignored "-Wold-style-cast" @@ -38,7 +39,7 @@ struct CrashReporter::Private {      std::shared_ptr<google_breakpad::ExceptionHandler> handler;  }; -CrashReporter::CrashReporter(const boost::filesystem::path& path) { +CrashReporter::CrashReporter(const boost::filesystem::path& path, const std::string& dumpPrefix) {      // Create the path that will contain the crash dumps      if (!boost::filesystem::exists(path)) {          try { @@ -61,6 +62,7 @@ CrashReporter::CrashReporter(const boost::filesystem::path& path) {                  handleDump,                  (void*) 0,                  google_breakpad::ExceptionHandler::HANDLER_ALL)); +    p->handler->set_dump_filename_prefix(std::wstring(dumpPrefix.begin(), dumpPrefix.end()));  // Turning it off for Mac, because it doesn't really help us  //#elif defined(SWIFTEN_PLATFORM_MACOSX)  //    p->handler = std::make_shared<google_breakpad::ExceptionHandler>(pathToString(path), (google_breakpad::ExceptionHandler::FilterCallback) 0, handleDump, (void*) 0, true, (const char*) 0); @@ -73,7 +75,7 @@ CrashReporter::CrashReporter(const boost::filesystem::path& path) {  // Dummy implementation  namespace Swift { -    CrashReporter::CrashReporter(const boost::filesystem::path&) {} +    CrashReporter::CrashReporter(const boost::filesystem::path&, const std::string&) {}  }  #endif diff --git a/SwifTools/CrashReporter.h b/SwifTools/CrashReporter.h index c80b1a2..1efa801 100644 --- a/SwifTools/CrashReporter.h +++ b/SwifTools/CrashReporter.h @@ -14,7 +14,7 @@  namespace Swift {      class CrashReporter {          public: -            CrashReporter(const boost::filesystem::path& path); +            CrashReporter(const boost::filesystem::path& path, const std::string& dumpPrefix);          private:              struct Private; diff --git a/Swift/QtUI/main.cpp b/Swift/QtUI/main.cpp index dde1487..11f51f6 100644 --- a/Swift/QtUI/main.cpp +++ b/Swift/QtUI/main.cpp @@ -4,10 +4,13 @@   * See the COPYING file for more information.   */ -#include <stdlib.h> - +#include <cstdlib>  #include <iostream> +#include <locale> +#include <memory> +#include <sstream> +#include <boost/date_time/gregorian/gregorian.hpp>  #include <boost/program_options.hpp>  #include <boost/program_options/options_description.hpp>  #include <boost/program_options/variables_map.hpp> @@ -35,7 +38,15 @@  int main(int argc, char* argv[]) {      Swift::PlatformApplicationPathProvider applicationPathProvider(SWIFT_APPLICATION_NAME); -    Swift::CrashReporter crashReporter(applicationPathProvider.getDataDir() / "crashes"); +    // Set crash report prefix to include date and version. +    std::stringstream prefix; +    auto outputFacet = std::unique_ptr<boost::gregorian::date_facet>(new boost::gregorian::date_facet()); +    outputFacet->format("%Y-%m-%d"); +    prefix.imbue(std::locale(std::locale::classic(), outputFacet.get())); + +    prefix << buildVersion << "_" << boost::gregorian::date(boost::gregorian::day_clock::local_day()) << "_"; + +    Swift::CrashReporter crashReporter(applicationPathProvider.getDataDir() / "crashes", prefix.str());  #if QT_VERSION < 0x050000      QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); | 
 Swift
 Swift