52 #ifndef __PCL_UnixSignalException_h
53 #define __PCL_UnixSignalException_h
57 #if defined( __PCL_WINDOWS ) || !defined( __PCL_LINUX ) && !defined( __PCL_FREEBSD ) && !defined( __PCL_MACOSX )
58 # error UnixSignalException can only be used on Linux, FreeBSD and macOS platforms.
102 , m_details( details )
139 return "Undefined signal";
148 String info =
String().
Format(
"Critical signal caught (%d): ", SignalNumber() ) + Message();
149 if ( !m_details.IsEmpty() )
152 info.Append( m_details );
164 return "PCL Unix Signal Handler";
177 void Show()
const override;
187 static void Initialize();
197 #define DECLARE_UNIX_SIGNAL_EXCEPTION( className, sigNum, message ) \
198 class PCL_CLASS className : public pcl::UnixSignalException \
201 className( const IsoString& details = IsoString() ) : \
202 pcl::UnixSignalException( sigNum, details ) \
205 className( const className& ) = default; \
206 String Message() const override \
214 DECLARE_UNIX_SIGNAL_EXCEPTION( EUnixSegmentationViolation, SIGSEGV,
215 "Segmentation violation" );
217 DECLARE_UNIX_SIGNAL_EXCEPTION( EUnixBusError, SIGBUS,
220 DECLARE_UNIX_SIGNAL_EXCEPTION( EUnixFloatingPointException, SIGFPE,
221 "Floating point exception" );
223 DECLARE_UNIX_SIGNAL_EXCEPTION( EUnixIllegalInstructionException, SIGILL,
224 "Illegal instruction" );
226 DECLARE_UNIX_SIGNAL_EXCEPTION( EUnixIBrokenPipeException, SIGPIPE,
231 #undef DECLARE_UNIX_SIGNAL_EXCEPTION
237 #endif // __PCL_UnixSignalException_h