Kaydet (Commit) 863d38fb authored tarafından Noel Grandin's avatar Noel Grandin Kaydeden (comit) Fridrich Strba

move DBG_UNHANDLED_EXCEPTION out of line

makes it easier to set a breakpoint on it.
Plus it's getting a little big to be a macro.

Change-Id: I2827aa3618ba966fbc85a4a56e0e794a55630730
Reviewed-on: https://gerrit.libreoffice.org/3988Reviewed-by: 's avatarFridrich Strba <fridrich@documentfoundation.org>
Tested-by: 's avatarFridrich Strba <fridrich@documentfoundation.org>
üst 65d24329
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
#define OSL_UNUSED( expression ) \ #define OSL_UNUSED( expression ) \
(void)(expression) (void)(expression)
#if OSL_DEBUG_LEVEL > 0 #if OSL_DEBUG_LEVEL > 0
#include <com/sun/star/configuration/CorruptedConfigurationException.hpp> #include <com/sun/star/configuration/CorruptedConfigurationException.hpp>
#include <com/sun/star/task/ErrorCodeIOException.hpp> #include <com/sun/star/task/ErrorCodeIOException.hpp>
...@@ -39,51 +41,15 @@ ...@@ -39,51 +41,15 @@
#include <boost/current_function.hpp> #include <boost/current_function.hpp>
#include <typeinfo> #include <typeinfo>
void DbgUnhandledException(const ::com::sun::star::uno::Any& caughtException, const char* currentFunction);
/** reports a caught UNO exception via OSL diagnostics /** reports a caught UNO exception via OSL diagnostics
Note that whenever you use this, it might be an indicator that your error Note that whenever you use this, it might be an indicator that your error
handling is not correct .... handling is not correct ....
*/ */
#define DBG_UNHANDLED_EXCEPTION() \ #define DBG_UNHANDLED_EXCEPTION() \
::com::sun::star::uno::Any caught( ::cppu::getCaughtException() ); \ DbgUnhandledException( ::cppu::getCaughtException(), BOOST_CURRENT_FUNCTION);
OString sMessage( "caught an exception!" ); \
sMessage += "\nin function:"; \
sMessage += BOOST_CURRENT_FUNCTION; \
sMessage += "\ntype: "; \
sMessage += OUStringToOString( caught.getValueTypeName(), osl_getThreadTextEncoding() ); \
::com::sun::star::uno::Exception exception; \
caught >>= exception; \
if ( !exception.Message.isEmpty() ) \
{ \
sMessage += "\nmessage: "; \
sMessage += OUStringToOString( exception.Message, osl_getThreadTextEncoding() ); \
} \
if ( exception.Context.is() ) \
{ \
const char* pContext = typeid( *exception.Context.get() ).name(); \
sMessage += "\ncontext: "; \
sMessage += pContext; \
} \
{ \
::com::sun::star::configuration::CorruptedConfigurationException \
specialized; \
if ( caught >>= specialized ) \
{ \
sMessage += "\ndetails: "; \
sMessage += OUStringToOString( \
specialized.Details, osl_getThreadTextEncoding() ); \
} \
} \
{ \
::com::sun::star::task::ErrorCodeIOException specialized; \
if ( caught >>= specialized ) \
{ \
sMessage += "\ndetails: "; \
sMessage += OString::valueOf( specialized.ErrCode ); \
} \
} \
sMessage += "\n"; \
OSL_ENSURE( false, sMessage.getStr() )
#else // OSL_DEBUG_LEVEL #else // OSL_DEBUG_LEVEL
#define DBG_UNHANDLED_EXCEPTION() #define DBG_UNHANDLED_EXCEPTION()
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include <vector> #include <vector>
#include <osl/diagnose.h> #include <osl/diagnose.h>
#include <tools/diagnose_ex.h>
#ifdef DBG_UTIL #ifdef DBG_UTIL
...@@ -1585,4 +1586,52 @@ void DbgOutf( const sal_Char*, ... ) {} ...@@ -1585,4 +1586,52 @@ void DbgOutf( const sal_Char*, ... ) {}
#endif #endif
#if OSL_DEBUG_LEVEL > 0
void DbgUnhandledException(const css::uno::Any & caught, const char* currentFunction)
{
OString sMessage( "caught an exception!" );
sMessage += "\nin function:";
sMessage += currentFunction;
sMessage += "\ntype: ";
sMessage += OUStringToOString( caught.getValueTypeName(), osl_getThreadTextEncoding() );
::com::sun::star::uno::Exception exception;
caught >>= exception;
if ( !exception.Message.isEmpty() )
{
sMessage += "\nmessage: ";
sMessage += OUStringToOString( exception.Message, osl_getThreadTextEncoding() );
}
if ( exception.Context.is() )
{
const char* pContext = typeid( *exception.Context.get() ).name();
sMessage += "\ncontext: ";
sMessage += pContext;
}
{
::com::sun::star::configuration::CorruptedConfigurationException
specialized;
if ( caught >>= specialized )
{
sMessage += "\ndetails: ";
sMessage += OUStringToOString(
specialized.Details, osl_getThreadTextEncoding() );
}
}
{
::com::sun::star::task::ErrorCodeIOException specialized;
if ( caught >>= specialized )
{
sMessage += "\ndetails: ";
sMessage += OString::valueOf( specialized.ErrCode );
}
}
sMessage += "\n";
OSL_ENSURE( false, sMessage.getStr() );
}
#endif // OSL_DEBUG_LEVEL
/* 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