diff options
author | Gopi Krishna Menon <gopi.menon@collabora.com> | 2021-06-16 10:02:23 +0000 |
---|---|---|
committer | Tor Lillqvist <tml@collabora.com> | 2021-06-18 09:05:36 +0200 |
commit | a3d89265e0be3f9ee8ae813e4aeaa90af1714348 (patch) | |
tree | 2ed46f464fd48f9ee145e4af9fa19e81d0e6995f | |
parent | 07e269f2596756bf841bbc380929bcffc3ca6bc6 (diff) |
Add Active Sfx Object Name To CrashReport Dump
Adds Active-SfxObject field in CrashReport to assist in investigating the crashes
Change-Id: I08637a66ae95977e7afe4f5dce634b46c928a423
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117318
Tested-by: Jenkins
Reviewed-by: Tor Lillqvist <tml@collabora.com>
-rw-r--r-- | desktop/source/app/crashreport.cxx | 20 | ||||
-rw-r--r-- | include/desktop/crashreport.hxx | 16 | ||||
-rw-r--r-- | sfx2/source/control/shell.cxx | 16 | ||||
-rw-r--r-- | sfx2/source/view/viewfrm.cxx | 41 |
4 files changed, 35 insertions, 58 deletions
diff --git a/desktop/source/app/crashreport.cxx b/desktop/source/app/crashreport.cxx index b6d8b14d8beb..7d3fc8e036b6 100644 --- a/desktop/source/app/crashreport.cxx +++ b/desktop/source/app/crashreport.cxx @@ -43,16 +43,17 @@ #endif osl::Mutex CrashReporter::maMutex; -osl::Mutex CrashReporter::maActiveNameMutex; +osl::Mutex CrashReporter::maActiveSfxObjectNameMutex; std::unique_ptr<google_breakpad::ExceptionHandler> CrashReporter::mpExceptionHandler; bool CrashReporter::mbInit = false; CrashReporter::vmaKeyValues CrashReporter::maKeyValues; -OUString CrashReporter::mActiveApp; +OUString CrashReporter::msActiveSfxObjectName; + #if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* /*context*/, bool succeeded) { - CrashReporter::addKeyValue("Active-App",CrashReporter::currentActiveApp(),CrashReporter::AddItem); + CrashReporter::addKeyValue("Active-SfxObject",CrashReporter::getActiveSfxObjectName(),CrashReporter::AddItem); CrashReporter::addKeyValue("DumpFile", OStringToOUString(descriptor.path(), RTL_TEXTENCODING_UTF8), CrashReporter::Write); SAL_WARN("desktop", "minidump generated: " << descriptor.path()); @@ -70,7 +71,7 @@ static bool dumpCallback(const wchar_t* path, const wchar_t* id, #endif std::wstring_convert<std::codecvt_utf8<wchar_t>> conv1; std::string aPath = conv1.to_bytes(std::wstring(path)) + conv1.to_bytes(std::wstring(id)) + ".dmp"; - CrashReporter::addKeyValue("Active-App",CrashReporter::currentActiveApp(),CrashReporter::AddItem); + CrashReporter::addKeyValue("Active-SfxObject",CrashReporter::getActiveSfxObjectName(),CrashReporter::AddItem); CrashReporter::addKeyValue("DumpFile", OStringToOUString(aPath.c_str(), RTL_TEXTENCODING_UTF8), CrashReporter::AddItem); CrashReporter::addKeyValue("GDIHandles", OUString::number(::GetGuiResources(::GetCurrentProcess(), GR_GDIOBJECTS)), CrashReporter::Write); SAL_WARN("desktop", "minidump generated: " << aPath); @@ -162,15 +163,16 @@ void CrashReporter::writeCommonInfo() updateMinidumpLocation(); } -void CrashReporter::setActiveApp(const OUString& rActiveApp) +void CrashReporter::setActiveSfxObjectName(const OUString& rActiveSfxObjectName) { - osl::MutexGuard aGuard(maActiveNameMutex); - mActiveApp=rActiveApp; + osl::MutexGuard aGuard(maActiveSfxObjectNameMutex); + msActiveSfxObjectName = rActiveSfxObjectName; } -OUString CrashReporter::currentActiveApp() +OUString CrashReporter::getActiveSfxObjectName() { - return mActiveApp; + osl::MutexGuard aGuard(maActiveSfxObjectNameMutex); + return msActiveSfxObjectName; } namespace { diff --git a/include/desktop/crashreport.hxx b/include/desktop/crashreport.hxx index c16b4a7eb80b..e7fd0d15d39b 100644 --- a/include/desktop/crashreport.hxx +++ b/include/desktop/crashreport.hxx @@ -50,18 +50,18 @@ public: static void installExceptionHandler(); static void removeExceptionHandler(); + static void setActiveSfxObjectName(const OUString& rActiveSfxObjectName); + static OUString getActiveSfxObjectName(); + static bool crashReportInfoExists(); static bool readSendConfig(std::string& response); static bool IsDumpEnable(); - static void setActiveApp(const OUString& rActiveApp); - static OUString currentActiveApp(); - private: static osl::Mutex maMutex; - static osl::Mutex maActiveNameMutex; + static osl::Mutex maActiveSfxObjectNameMutex; static bool mbInit; typedef struct _mpair { @@ -76,7 +76,7 @@ private: typedef std::vector<mpair> vmaKeyValues; static vmaKeyValues maKeyValues; // used to temporarily save entries before the old info has been uploaded - static OUString mActiveApp; + static OUString msActiveSfxObjectName; static std::unique_ptr<google_breakpad::ExceptionHandler> mpExceptionHandler; @@ -93,11 +93,11 @@ private: // // the code without linking to the lib and without adding HAVE_FEATURE_BREAKPAD // // everywhere we want to log something to the crash report system. inline static void addKeyValue(SAL_UNUSED_PARAMETER const OUString& /*rKey*/, SAL_UNUSED_PARAMETER const OUString& /*rValue*/, SAL_UNUSED_PARAMETER tAddKeyHandling /*AddKeyHandling*/) {}; - inline static void setActiveApp(SAL_UNUSED_PARAMETER const OUString& /*rActiveApp*/) {}; - inline static OUString currentActiveApp() + inline static void setActiveSfxObjectName(SAL_UNUSED_PARAMETER const OUString& /*rActiveSfxObjectName*/) {}; + inline static OUString getActiveSfxObjectName() { return OUString(); - }; + } #endif // HAVE_FEATURE_BREAKPAD }; diff --git a/sfx2/source/control/shell.cxx b/sfx2/source/control/shell.cxx index 78639a958a4f..5a8dc39aaaf5 100644 --- a/sfx2/source/control/shell.cxx +++ b/sfx2/source/control/shell.cxx @@ -47,6 +47,8 @@ #include <vector> #include <map> +#include <desktop/crashreport.hxx> + using namespace com::sun::star; struct SfxShell_Impl: public SfxBroadcaster @@ -289,6 +291,20 @@ void SfxShell::HandleOpenXmlFilterSettings(SfxRequest & rReq) void SfxShell::DoActivate_Impl( SfxViewFrame *pFrame, bool bMDI ) { + SfxObjectShell* pObjectShell = GetObjectShell(); + if ( pObjectShell ) + { + const OUString sActiveDocName = pObjectShell->GetTitle(); + if( !pImpl->aObjectName.startsWith(sActiveDocName) ) + { + CrashReporter::setActiveSfxObjectName(pImpl->aObjectName); + } + } + else + { + CrashReporter::setActiveSfxObjectName(pImpl->aObjectName); + } + #ifdef DBG_UTIL const SfxInterface *p_IF = GetInterface(); if ( !p_IF ) diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx index e6bb74f628be..b7fa742cabe8 100644 --- a/sfx2/source/view/viewfrm.cxx +++ b/sfx2/source/view/viewfrm.cxx @@ -98,8 +98,6 @@ #include <commandpopup/CommandPopup.hxx> -#include <desktop/crashreport.hxx> - using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -148,42 +146,6 @@ using ::com::sun::star::container::XIndexContainer; SFX_IMPL_SUPERCLASS_INTERFACE(SfxViewFrame,SfxShell) -static OUString lcl_getModuleId(SfxViewFrame* pFrame) -{ - try - { - const auto xContext= comphelper::getProcessComponentContext(); - const Reference<frame::XFrame>& xFrame = pFrame->GetFrame().GetFrameInterface(); - const Reference<frame::XModuleManager> xModuleManager = frame::ModuleManager::create(xContext); - - return xModuleManager->identify(xFrame); - } - catch( css::frame::UnknownModuleException& ) - { - return OUString(); - } -} - -static OUString lcl_activeAppName(SfxViewFrame* pFrame) -{ - const OUString aModuleId = lcl_getModuleId(pFrame); - if ( aModuleId.startsWith("com.sun.star.text.") || aModuleId.startsWith("com.sun.star.xforms.") ) - return "Writer"; - else if ( aModuleId.startsWith("com.sun.star.sheet.") ) - return "Calc"; - else if ( aModuleId.startsWith("com.sun.star.presentation.") ) - return "Impress"; - else if ( aModuleId.startsWith("com.sun.star.drawing." ) ) - return "Draw"; - else if ( aModuleId.startsWith("com.sun.star.formula." ) ) - return "Math"; - else if ( aModuleId.startsWith("com.sun.star.sdb.") ) - return "Base"; - else - return OUString(); - -} - void SfxViewFrame::InitInterface_Impl() { GetStaticInterface()->RegisterChildWindow(SID_BROWSER); @@ -3417,10 +3379,7 @@ void SfxViewFrame::UpdateDocument_Impl() void SfxViewFrame::SetViewFrame( SfxViewFrame* pFrame ) { if(pFrame) - { - CrashReporter::setActiveApp(lcl_activeAppName(pFrame)); SetSVHelpData(pFrame->m_pHelpData); - } SetSVWinData(pFrame ? pFrame->m_pWinData : nullptr); |