diff options
Diffstat (limited to 'sal')
-rw-r--r-- | sal/inc/misc.hxx | 2 | ||||
-rw-r--r-- | sal/osl/all/log.cxx | 29 | ||||
-rw-r--r-- | sal/osl/unx/backtraceapi.cxx | 2 | ||||
-rw-r--r-- | sal/osl/w32/backtrace.cxx | 6 | ||||
-rw-r--r-- | sal/util/sal.map | 5 |
5 files changed, 30 insertions, 14 deletions
diff --git a/sal/inc/misc.hxx b/sal/inc/misc.hxx index b93868e1baab..440c00ce2548 100644 --- a/sal/inc/misc.hxx +++ b/sal/inc/misc.hxx @@ -12,7 +12,7 @@ #include <rtl/ustring.hxx> /// Build a debugging backtrace from current PC location. -rtl_uString *osl_backtraceAsString(void); +rtl_uString *osl_backtraceAsString(int maxNoStackFramesToDisplay); #endif // INCLUDED_SAL_INC_INTERNAL_MISC_H diff --git a/sal/osl/all/log.cxx b/sal/osl/all/log.cxx index 23f45cdb4875..7245a51000b4 100644 --- a/sal/osl/all/log.cxx +++ b/sal/osl/all/log.cxx @@ -68,7 +68,6 @@ char const * toString(sal_detail_LogLevel level) { case SAL_DETAIL_LOG_LEVEL_WARN: return "warn"; case SAL_DETAIL_LOG_LEVEL_DEBUG: - case SAL_DETAIL_LOG_LEVEL_DEBUG_TRACE: return "debug"; default: assert(false); // this cannot happen @@ -188,8 +187,7 @@ void maybeOutputTimestamp(std::ostringstream &s) { #endif bool isDebug(sal_detail_LogLevel level) { - return level == SAL_DETAIL_LOG_LEVEL_DEBUG || - level == SAL_DETAIL_LOG_LEVEL_DEBUG_TRACE; + return level == SAL_DETAIL_LOG_LEVEL_DEBUG; } bool report(sal_detail_LogLevel level, char const * area) { @@ -298,10 +296,6 @@ void log( } s << message; - if (level == SAL_DETAIL_LOG_LEVEL_DEBUG_TRACE) { - s << " at:\n"; - s << OUString(osl_backtraceAsString(), SAL_NO_ACQUIRE); - } s << '\n'; #if defined ANDROID @@ -314,7 +308,6 @@ void log( android_log_level = ANDROID_LOG_WARN; break; case SAL_DETAIL_LOG_LEVEL_DEBUG: - case SAL_DETAIL_LOG_LEVEL_DEBUG_TRACE: android_log_level = ANDROID_LOG_DEBUG; break; default: @@ -336,7 +329,6 @@ void log( prio = LOG_WARNING; break; case SAL_DETAIL_LOG_LEVEL_DEBUG: - case SAL_DETAIL_LOG_LEVEL_DEBUG_TRACE: prio = LOG_DEBUG; break; default: @@ -359,6 +351,16 @@ void log( #endif } +void log_backtrace( + sal_detail_LogLevel level, char const * area, char const * where, + char const * message, int maxNoStackFramesToDisplay) +{ + OUString buff = OUString::createFromAscii(message) + + " at:\n" + + OUString(osl_backtraceAsString(maxNoStackFramesToDisplay), SAL_NO_ACQUIRE); + log(level, area, where, buff.toUtf8().getStr()); +} + } void sal_detail_log( @@ -370,6 +372,15 @@ void sal_detail_log( } } +void sal_detail_log_backtrace( + sal_detail_LogLevel level, char const * area, char const * where, + char const * message, int maxNoStackFramesToDisplay) +{ + if (report(level, area)) { + log_backtrace(level, area, where, message, maxNoStackFramesToDisplay); + } +} + void sal_detail_logFormat( sal_detail_LogLevel level, char const * area, char const * where, char const * format, ...) diff --git a/sal/osl/unx/backtraceapi.cxx b/sal/osl/unx/backtraceapi.cxx index 1895c4360837..d42fe674adb9 100644 --- a/sal/osl/unx/backtraceapi.cxx +++ b/sal/osl/unx/backtraceapi.cxx @@ -13,7 +13,7 @@ #include "misc.hxx" // FIXME: no-op for now; it needs implementing, cf. above. -rtl_uString *osl_backtraceAsString() +rtl_uString *osl_backtraceAsString(int /*maxNoStackFramesToDisplay*/) { OUStringBuffer aBuf; OUString aStr = aBuf.makeStringAndClear(); diff --git a/sal/osl/w32/backtrace.cxx b/sal/osl/w32/backtrace.cxx index b618c6822c51..e4e71c26ba3c 100644 --- a/sal/osl/w32/backtrace.cxx +++ b/sal/osl/w32/backtrace.cxx @@ -17,15 +17,15 @@ #include <rtl/ustrbuf.hxx> -rtl_uString *osl_backtraceAsString() +rtl_uString *osl_backtraceAsString(int maxNoStackFramesToDisplay) { OUStringBuffer aBuf; HANDLE hProcess = GetCurrentProcess(); SymInitialize( hProcess, nullptr, true ); - void * aStack[ 512 ]; - sal_uInt32 nFrames = CaptureStackBackTrace( 0, 512, aStack, nullptr ); + void * aStack[ maxNoStackFramesToDisplay ]; + sal_uInt32 nFrames = CaptureStackBackTrace( 0, maxNoStackFramesToDisplay, aStack, nullptr ); SYMBOL_INFO * pSymbol; pSymbol = static_cast<SYMBOL_INFO *>(calloc( sizeof( SYMBOL_INFO ) + 1024 * sizeof( char ), 1 )); diff --git a/sal/util/sal.map b/sal/util/sal.map index c8f3a7426964..96ea9d13b945 100644 --- a/sal/util/sal.map +++ b/sal/util/sal.map @@ -728,6 +728,11 @@ PRIVATE_1.2 { # LibreOffice 3.5 sal_detail_logFormat; } PRIVATE_1.1; +PRIVATE_1.3 { # LibreOffice 5.4 + global: + sal_detail_log_backtrace; +} PRIVATE_1.2; + PRIVATE_textenc.1 { # LibreOffice 3.6 global: _ZN3sal6detail7textenc20convertCharToUnicode*; |