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/3988
Reviewed-by: Fridrich Strba <fridrich@documentfoundation.org>
Tested-by: Fridrich Strba <fridrich@documentfoundation.org>
This commit is contained in:
Noel Grandin 2013-05-21 08:40:07 +02:00 committed by Fridrich Strba
parent 65d2432963
commit 863d38fbfa
2 changed files with 54 additions and 39 deletions

View file

@ -30,6 +30,8 @@
#define OSL_UNUSED( expression ) \
(void)(expression)
#if OSL_DEBUG_LEVEL > 0
#include <com/sun/star/configuration/CorruptedConfigurationException.hpp>
#include <com/sun/star/task/ErrorCodeIOException.hpp>
@ -39,51 +41,15 @@
#include <boost/current_function.hpp>
#include <typeinfo>
void DbgUnhandledException(const ::com::sun::star::uno::Any& caughtException, const char* currentFunction);
/** reports a caught UNO exception via OSL diagnostics
Note that whenever you use this, it might be an indicator that your error
handling is not correct ....
*/
#define DBG_UNHANDLED_EXCEPTION() \
::com::sun::star::uno::Any caught( ::cppu::getCaughtException() ); \
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() )
DbgUnhandledException( ::cppu::getCaughtException(), BOOST_CURRENT_FUNCTION);
#else // OSL_DEBUG_LEVEL
#define DBG_UNHANDLED_EXCEPTION()

View file

@ -42,6 +42,7 @@
#include <vector>
#include <osl/diagnose.h>
#include <tools/diagnose_ex.h>
#ifdef DBG_UTIL
@ -1585,4 +1586,52 @@ void DbgOutf( const sal_Char*, ... ) {}
#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: */