Kaydet (Commit) 98df76f2 authored tarafından Markus Mohrhard's avatar Markus Mohrhard

use the new ini file based minidump uploader

Change-Id: Iaf85fb53e6eff34e268b6948d62ca84b7f8e6dd2
Reviewed-on: https://gerrit.libreoffice.org/22558Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMarkus Mohrhard <markus.mohrhard@googlemail.com>
üst 8e9d171c
...@@ -543,6 +543,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo, \ ...@@ -543,6 +543,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo, \
collator_data \ collator_data \
comphelper \ comphelper \
$(call gb_Helper_optional,DBCONNECTIVITY,dbpool2) \ $(call gb_Helper_optional,DBCONNECTIVITY,dbpool2) \
$(call gb_Helper_optional,BREAKPAD,crashreport) \
deployment \ deployment \
deploymentgui \ deploymentgui \
dict_ja \ dict_ja \
......
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
$(eval $(call gb_Library_Library,crashreport))
$(eval $(call gb_Library_set_include,crashreport,\
$$(INCLUDE) \
-I$(SRCDIR)/desktop/inc \
))
$(eval $(call gb_Library_use_external,crashreport,breakpad))
$(eval $(call gb_Library_add_defs,crashreport,\
-DCRASHREPORT_DLLIMPLEMENTATION \
))
$(eval $(call gb_Library_add_libs,crashreport,\
$(if $(filter LINUX %BSD SOLARIS, $(OS)), \
$(DLOPEN_LIBS) \
-lpthread \
) \
))
$(eval $(call gb_Library_use_libraries,crashreport,\
comphelper \
cppu \
cppuhelper \
sal \
salhelper \
$(gb_UWINAPI) \
))
$(eval $(call gb_Library_add_exception_objects,crashreport,\
desktop/source/app/crashreport \
))
# vim: set ts=4 sw=4 et:
...@@ -25,6 +25,10 @@ $(eval $(call gb_Library_add_libs,sofficeapp,\ ...@@ -25,6 +25,10 @@ $(eval $(call gb_Library_add_libs,sofficeapp,\
$(eval $(call gb_Library_use_external,sofficeapp,boost_headers)) $(eval $(call gb_Library_use_external,sofficeapp,boost_headers))
ifeq ($(ENABLE_BREAKPAD),TRUE)
$(eval $(call gb_Library_use_external,sofficeapp,breakpad))
endif
$(eval $(call gb_Library_use_custom_headers,sofficeapp,\ $(eval $(call gb_Library_use_custom_headers,sofficeapp,\
officecfg/registry \ officecfg/registry \
)) ))
...@@ -44,6 +48,9 @@ $(eval $(call gb_Library_use_libraries,sofficeapp,\ ...@@ -44,6 +48,9 @@ $(eval $(call gb_Library_use_libraries,sofficeapp,\
comphelper \ comphelper \
cppu \ cppu \
cppuhelper \ cppuhelper \
$(if $(filter TRUE,$(ENABLE_BREAKPAD)), \
crashreport \
) \
deploymentmisc \ deploymentmisc \
editeng \ editeng \
i18nlangtag \ i18nlangtag \
...@@ -86,7 +93,6 @@ $(eval $(call gb_Library_add_exception_objects,sofficeapp,\ ...@@ -86,7 +93,6 @@ $(eval $(call gb_Library_add_exception_objects,sofficeapp,\
desktop/source/app/check_ext_deps \ desktop/source/app/check_ext_deps \
desktop/source/app/cmdlineargs \ desktop/source/app/cmdlineargs \
desktop/source/app/cmdlinehelp \ desktop/source/app/cmdlinehelp \
desktop/source/app/crashreport \
desktop/source/app/desktopcontext \ desktop/source/app/desktopcontext \
desktop/source/app/desktopresid \ desktop/source/app/desktopresid \
desktop/source/app/dispatchwatcher \ desktop/source/app/dispatchwatcher \
...@@ -117,10 +123,6 @@ $(eval $(call gb_Library_add_libs,sofficeapp,\ ...@@ -117,10 +123,6 @@ $(eval $(call gb_Library_add_libs,sofficeapp,\
endif endif
endif endif
ifeq ($(ENABLE_BREAKPAD),TRUE)
$(eval $(call gb_Library_use_external,sofficeapp,breakpad))
endif
# LibreOfficeKit bits # LibreOfficeKit bits
ifneq ($(filter $(OS),ANDROID IOS MACOSX WNT),) ifneq ($(filter $(OS),ANDROID IOS MACOSX WNT),)
$(eval $(call gb_Library_add_exception_objects,sofficeapp,\ $(eval $(call gb_Library_add_exception_objects,sofficeapp,\
......
...@@ -17,6 +17,7 @@ $(eval $(call gb_Module_add_targets,desktop,\ ...@@ -17,6 +17,7 @@ $(eval $(call gb_Module_add_targets,desktop,\
Library_deploymentmisc \ Library_deploymentmisc \
Library_offacc \ Library_offacc \
Library_sofficeapp \ Library_sofficeapp \
$(if $(ENABLE_BREAKPAD),Library_crashreport) \
$(if $(ENABLE_HEADLESS),,Library_spl) \ $(if $(ENABLE_HEADLESS),,Library_spl) \
Package_branding \ Package_branding \
$(if $(CUSTOM_BRAND_DIR),Package_branding_custom) \ $(if $(CUSTOM_BRAND_DIR),Package_branding_custom) \
......
...@@ -16,15 +16,6 @@ osl::Mutex CrashReporter::maMutex; ...@@ -16,15 +16,6 @@ osl::Mutex CrashReporter::maMutex;
#if HAVE_FEATURE_BREAKPAD #if HAVE_FEATURE_BREAKPAD
namespace {
const char* getIniFileName()
{
return "/tmp/dump.ini";
}
}
void CrashReporter::AddKeyValue(const OUString& rKey, const OUString& rValue) void CrashReporter::AddKeyValue(const OUString& rKey, const OUString& rValue)
{ {
osl::MutexGuard aGuard(maMutex); osl::MutexGuard aGuard(maMutex);
...@@ -33,6 +24,13 @@ void CrashReporter::AddKeyValue(const OUString& rKey, const OUString& rValue) ...@@ -33,6 +24,13 @@ void CrashReporter::AddKeyValue(const OUString& rKey, const OUString& rValue)
ini_file << rtl::OUStringToOString(rKey, RTL_TEXTENCODING_UTF8).getStr() << "="; ini_file << rtl::OUStringToOString(rKey, RTL_TEXTENCODING_UTF8).getStr() << "=";
ini_file << rtl::OUStringToOString(rValue, RTL_TEXTENCODING_UTF8).getStr() << "\n"; ini_file << rtl::OUStringToOString(rValue, RTL_TEXTENCODING_UTF8).getStr() << "\n";
} }
#endif #endif
const char* CrashReporter::getIniFileName()
{
// TODO: we need a generic solution for the location
return "/tmp/dump.ini";
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -44,6 +44,8 @@ ...@@ -44,6 +44,8 @@
#include <unotools/mediadescriptor.hxx> #include <unotools/mediadescriptor.hxx>
#if HAVE_FEATURE_BREAKPAD #if HAVE_FEATURE_BREAKPAD
#include <fstream>
#include <desktop/crashreport.hxx>
#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID #if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID
#include <client/linux/handler/exception_handler.h> #include <client/linux/handler/exception_handler.h>
...@@ -74,10 +76,13 @@ OString getLibDir() ...@@ -74,10 +76,13 @@ OString getLibDir()
#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID #if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID
static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* /*context*/, bool succeeded) static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* /*context*/, bool succeeded)
{ {
std::string ini_path = CrashReporter::getIniFileName();
std::ofstream minidump_file(ini_path, std::ios_base::app);
minidump_file << "DumpFile=" << descriptor.path() << "\n";;
minidump_file.close();
// send the minidump to the server (not yet implemented) // send the minidump to the server (not yet implemented)
SAL_WARN("destkop.crashreport", "minidump generated: " << descriptor.path()); SAL_WARN("destkop.crashreport", "minidump generated: " << descriptor.path());
OString aCommand = getLibDir().copy(7) + "/minidump_upload -p LibreOffice -v \"" LIBO_VERSION_DOTTED "\" "; OString aCommand = getLibDir().copy(7) + "/minidump_upload " + ini_path.c_str();
aCommand = aCommand + descriptor.path() + " http://libreofficecrash.org/submit";
int retVal = std::system(aCommand.getStr()); int retVal = std::system(aCommand.getStr());
SAL_WARN_IF(retVal != 0, "destkop.crashreport", "Failed to upload minidump. Error Code: " << retVal); SAL_WARN_IF(retVal != 0, "destkop.crashreport", "Failed to upload minidump. Error Code: " << retVal);
return succeeded; return succeeded;
...@@ -90,6 +95,12 @@ extern "C" int DESKTOP_DLLPUBLIC soffice_main() ...@@ -90,6 +95,12 @@ extern "C" int DESKTOP_DLLPUBLIC soffice_main()
#if HAVE_FEATURE_BREAKPAD #if HAVE_FEATURE_BREAKPAD
//limit the amount of code that needs to be executed before the crash reporting //limit the amount of code that needs to be executed before the crash reporting
std::string ini_path = CrashReporter::getIniFileName();
std::ofstream minidump_file(ini_path, std::ios_base::trunc);
minidump_file << "ProductName=LibreOffice\n";
minidump_file << "Version=" << LIBO_VERSION_DOTTED << "\n";
minidump_file.close();
#if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID #if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID
google_breakpad::MinidumpDescriptor descriptor("/tmp"); google_breakpad::MinidumpDescriptor descriptor("/tmp");
google_breakpad::ExceptionHandler eh(descriptor, nullptr, dumpCallback, nullptr, true, -1); google_breakpad::ExceptionHandler eh(descriptor, nullptr, dumpCallback, nullptr, true, -1);
......
...@@ -27,14 +27,14 @@ ...@@ -27,14 +27,14 @@
* * AdapterDeviceId * * AdapterDeviceId
* *
*/ */
class DESKTOP_DLLPUBLIC CrashReporter class CRASHREPORT_DLLPUBLIC CrashReporter
{ {
public: public:
static void AddKeyValue(const OUString& rKey, const OUString& rValue); static void AddKeyValue(const OUString& rKey, const OUString& rValue);
private: static const char* getIniFileName();
static std::map<OUString, OUString> maValueMap; private:
static osl::Mutex maMutex; static osl::Mutex maMutex;
}; };
......
...@@ -19,6 +19,12 @@ ...@@ -19,6 +19,12 @@
# define DESKTOP_DLLPUBLIC SAL_DLLPUBLIC_IMPORT # define DESKTOP_DLLPUBLIC SAL_DLLPUBLIC_IMPORT
#endif #endif
#if defined(CRASHREPORT_DLLIMPLEMENTATION)
# define CRASHREPORT_DLLPUBLIC SAL_DLLPUBLIC_EXPORT
#else
# define CRASHREPORT_DLLPUBLIC SAL_DLLPUBLIC_IMPORT
#endif
#endif #endif
/* vim: set shiftwidth=4 softtabstop=4 expandtab: */ /* vim: set shiftwidth=4 softtabstop=4 expandtab: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment