Commit 2c38be07 authored by Roman Donchenko's avatar Roman Donchenko

Enabled CV_Assert and such to print the function name with Visual C++.

Also, I made a separate macro for the current function name, which
helps simplify a lot of code that uses it.
parent 641bb7ac
...@@ -169,7 +169,6 @@ bool DetectionBasedTracker::SeparateDetectionWork::run() ...@@ -169,7 +169,6 @@ bool DetectionBasedTracker::SeparateDetectionWork::run()
return true; return true;
} }
#ifdef __GNUC__
#define CATCH_ALL_AND_LOG(_block) \ #define CATCH_ALL_AND_LOG(_block) \
do { \ do { \
try { \ try { \
...@@ -177,29 +176,13 @@ do { ...@@ -177,29 +176,13 @@ do {
break; \ break; \
} \ } \
catch(cv::Exception& e) { \ catch(cv::Exception& e) { \
LOGE0("\n %s: ERROR: OpenCV Exception caught: \n'%s'\n\n", __func__, e.what()); \ LOGE0("\n %s: ERROR: OpenCV Exception caught: \n'%s'\n\n", CV_Func, e.what()); \
} catch(std::exception& e) { \ } catch(std::exception& e) { \
LOGE0("\n %s: ERROR: Exception caught: \n'%s'\n\n", __func__, e.what()); \ LOGE0("\n %s: ERROR: Exception caught: \n'%s'\n\n", CV_Func, e.what()); \
} catch(...) { \ } catch(...) { \
LOGE0("\n %s: ERROR: UNKNOWN Exception caught\n\n", __func__); \ LOGE0("\n %s: ERROR: UNKNOWN Exception caught\n\n", CV_Func); \
} \ } \
} while(0) } while(0)
#else
#define CATCH_ALL_AND_LOG(_block) \
do { \
try { \
_block; \
break; \
} \
catch(cv::Exception& e) { \
LOGE0("\n ERROR: OpenCV Exception caught: \n'%s'\n\n", e.what()); \
} catch(std::exception& e) { \
LOGE0("\n ERROR: Exception caught: \n'%s'\n\n", e.what()); \
} catch(...) { \
LOGE0("\n ERROR: UNKNOWN Exception caught\n\n"); \
} \
} while(0)
#endif
void* workcycleObjectDetectorFunction(void* p) void* workcycleObjectDetectorFunction(void* p)
{ {
......
...@@ -164,7 +164,7 @@ public: ...@@ -164,7 +164,7 @@ public:
int code; ///< error code @see CVStatus int code; ///< error code @see CVStatus
string err; ///< error description string err; ///< error description
string func; ///< function name. Available only when the compiler supports __func__ macro string func; ///< function name. Available only when the compiler supports getting it
string file; ///< source file name where the error has occured string file; ///< source file name where the error has occured
int line; ///< line number in the source file where the error has occured int line; ///< line number in the source file where the error has occured
}; };
...@@ -209,16 +209,19 @@ typedef int (CV_CDECL *ErrorCallback)( int status, const char* func_name, ...@@ -209,16 +209,19 @@ typedef int (CV_CDECL *ErrorCallback)( int status, const char* func_name,
CV_EXPORTS ErrorCallback redirectError( ErrorCallback errCallback, CV_EXPORTS ErrorCallback redirectError( ErrorCallback errCallback,
void* userdata=0, void** prevUserdata=0); void* userdata=0, void** prevUserdata=0);
#ifdef __GNUC__
#define CV_Error( code, msg ) cv::error( cv::Exception(code, msg, __func__, __FILE__, __LINE__) ) #if defined __GNUC__
#define CV_Error_( code, args ) cv::error( cv::Exception(code, cv::format args, __func__, __FILE__, __LINE__) ) #define CV_Func __func__
#define CV_Assert( expr ) if(!!(expr)) ; else cv::error( cv::Exception(CV_StsAssert, #expr, __func__, __FILE__, __LINE__) ) #elif defined _MSC_VER
#define CV_Func __FUNCTION__
#else #else
#define CV_Error( code, msg ) cv::error( cv::Exception(code, msg, "", __FILE__, __LINE__) ) #define CV_Func ""
#define CV_Error_( code, args ) cv::error( cv::Exception(code, cv::format args, "", __FILE__, __LINE__) )
#define CV_Assert( expr ) if(!!(expr)) ; else cv::error( cv::Exception(CV_StsAssert, #expr, "", __FILE__, __LINE__) )
#endif #endif
#define CV_Error( code, msg ) cv::error( cv::Exception(code, msg, CV_Func, __FILE__, __LINE__) )
#define CV_Error_( code, args ) cv::error( cv::Exception(code, cv::format args, CV_Func, __FILE__, __LINE__) )
#define CV_Assert( expr ) if(!!(expr)) ; else cv::error( cv::Exception(CV_StsAssert, #expr, CV_Func, __FILE__, __LINE__) )
#ifdef _DEBUG #ifdef _DEBUG
#define CV_DbgAssert(expr) CV_Assert(expr) #define CV_DbgAssert(expr) CV_Assert(expr)
#else #else
......
...@@ -774,11 +774,7 @@ namespace cv { namespace ogl { ...@@ -774,11 +774,7 @@ namespace cv { namespace ogl {
CV_EXPORTS bool checkError(const char* file, const int line, const char* func = ""); CV_EXPORTS bool checkError(const char* file, const int line, const char* func = "");
}} }}
#if defined(__GNUC__) #define CV_CheckGlError() CV_DbgAssert( (cv::ogl::checkError(__FILE__, __LINE__, CV_Func)) )
#define CV_CheckGlError() CV_DbgAssert( (cv::ogl::checkError(__FILE__, __LINE__, __func__)) )
#else
#define CV_CheckGlError() CV_DbgAssert( (cv::ogl::checkError(__FILE__, __LINE__)) )
#endif
#endif //__cplusplus #endif //__cplusplus
......
...@@ -72,13 +72,8 @@ using namespace cv::gpu; ...@@ -72,13 +72,8 @@ using namespace cv::gpu;
namespace namespace
{ {
#if defined(__GNUC__) #define cudaSafeCall(expr) ___cudaSafeCall(expr, __FILE__, __LINE__, CV_Func)
#define cudaSafeCall(expr) ___cudaSafeCall(expr, __FILE__, __LINE__, __func__) #define nppSafeCall(expr) ___nppSafeCall(expr, __FILE__, __LINE__, CV_Func)
#define nppSafeCall(expr) ___nppSafeCall(expr, __FILE__, __LINE__, __func__)
#else /* defined(__CUDACC__) || defined(__MSVC__) */
#define cudaSafeCall(expr) ___cudaSafeCall(expr, __FILE__, __LINE__)
#define nppSafeCall(expr) ___nppSafeCall(expr, __FILE__, __LINE__)
#endif
inline void ___cudaSafeCall(cudaError_t err, const char *file, const int line, const char *func = "") inline void ___cudaSafeCall(cudaError_t err, const char *file, const int line, const char *func = "")
{ {
......
...@@ -69,11 +69,7 @@ namespace ...@@ -69,11 +69,7 @@ namespace
#else #else
void throw_nocuda() { CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); } void throw_nocuda() { CV_Error(CV_StsNotImplemented, "The called functionality is disabled for current build or platform"); }
#if defined(__GNUC__) #define cudaSafeCall(expr) ___cudaSafeCall(expr, __FILE__, __LINE__, CV_Func)
#define cudaSafeCall(expr) ___cudaSafeCall(expr, __FILE__, __LINE__, __func__)
#else /* defined(__CUDACC__) || defined(__MSVC__) */
#define cudaSafeCall(expr) ___cudaSafeCall(expr, __FILE__, __LINE__)
#endif
void ___cudaSafeCall(cudaError_t err, const char* file, const int line, const char* func = "") void ___cudaSafeCall(cudaError_t err, const char* file, const int line, const char* func = "")
{ {
......
...@@ -415,13 +415,8 @@ cvCreateMap( int flags, int header_size, int elem_size, ...@@ -415,13 +415,8 @@ cvCreateMap( int flags, int header_size, int elem_size,
return map; return map;
} }
#ifdef __GNUC__
#define CV_PARSE_ERROR( errmsg ) \ #define CV_PARSE_ERROR( errmsg ) \
icvParseError( fs, __func__, (errmsg), __FILE__, __LINE__ ) icvParseError( fs, CV_Func, (errmsg), __FILE__, __LINE__ )
#else
#define CV_PARSE_ERROR( errmsg ) \
icvParseError( fs, "", (errmsg), __FILE__, __LINE__ )
#endif
static void static void
icvParseError( CvFileStorage* fs, const char* func_name, icvParseError( CvFileStorage* fs, const char* func_name,
......
...@@ -81,11 +81,7 @@ static inline void ___nppSafeCall(int err, const char *file, const int line, con ...@@ -81,11 +81,7 @@ static inline void ___nppSafeCall(int err, const char *file, const int line, con
cv::gpu::nppError(err, file, line, func); cv::gpu::nppError(err, file, line, func);
} }
#if defined(__GNUC__) #define nppSafeCall(expr) ___nppSafeCall(expr, __FILE__, __LINE__, CV_Func)
#define nppSafeCall(expr) ___nppSafeCall(expr, __FILE__, __LINE__, __func__)
#else
#define nppSafeCall(expr) ___nppSafeCall(expr, __FILE__, __LINE__)
#endif
// ncvSafeCall // ncvSafeCall
...@@ -95,11 +91,7 @@ static inline void ___ncvSafeCall(int err, const char *file, const int line, con ...@@ -95,11 +91,7 @@ static inline void ___ncvSafeCall(int err, const char *file, const int line, con
cv::gpu::ncvError(err, file, line, func); cv::gpu::ncvError(err, file, line, func);
} }
#if defined(__GNUC__) #define ncvSafeCall(expr) ___ncvSafeCall(expr, __FILE__, __LINE__, CV_Func)
#define ncvSafeCall(expr) ___ncvSafeCall(expr, __FILE__, __LINE__, __func__)
#else
#define ncvSafeCall(expr) ___ncvSafeCall(expr, __FILE__, __LINE__)
#endif
// cufftSafeCall // cufftSafeCall
...@@ -110,11 +102,7 @@ static inline void ___ncvSafeCall(int err, const char *file, const int line, con ...@@ -110,11 +102,7 @@ static inline void ___ncvSafeCall(int err, const char *file, const int line, con
cv::gpu::cufftError(err, file, line, func); cv::gpu::cufftError(err, file, line, func);
} }
#if defined(__GNUC__) #define cufftSafeCall(expr) ___cufftSafeCall(expr, __FILE__, __LINE__, CV_Func)
#define cufftSafeCall(expr) ___cufftSafeCall(expr, __FILE__, __LINE__, __func__)
#else
#define cufftSafeCall(expr) ___cufftSafeCall(expr, __FILE__, __LINE__)
#endif
#endif #endif
// cublasSafeCall // cublasSafeCall
...@@ -126,11 +114,7 @@ static inline void ___ncvSafeCall(int err, const char *file, const int line, con ...@@ -126,11 +114,7 @@ static inline void ___ncvSafeCall(int err, const char *file, const int line, con
cv::gpu::cublasError(err, file, line, func); cv::gpu::cublasError(err, file, line, func);
} }
#if defined(__GNUC__) #define cublasSafeCall(expr) ___cublasSafeCall(expr, __FILE__, __LINE__, CV_Func)
#define cublasSafeCall(expr) ___cublasSafeCall(expr, __FILE__, __LINE__, __func__)
#else
#define cublasSafeCall(expr) ___cublasSafeCall(expr, __FILE__, __LINE__)
#endif
#endif #endif
#endif /* __OPENCV_CUDA_SAFE_CALL_HPP__ */ #endif /* __OPENCV_CUDA_SAFE_CALL_HPP__ */
...@@ -48,13 +48,8 @@ ...@@ -48,13 +48,8 @@
#include "opencv2/ocl/cl_runtime/cl_runtime.hpp" #include "opencv2/ocl/cl_runtime/cl_runtime.hpp"
#if defined(__GNUC__) #define openCLSafeCall(expr) ___openCLSafeCall(expr, __FILE__, __LINE__, CV_Func)
#define openCLSafeCall(expr) ___openCLSafeCall(expr, __FILE__, __LINE__, __func__) #define openCLVerifyCall(res) ___openCLSafeCall(res, __FILE__, __LINE__, CV_Func)
#define openCLVerifyCall(res) ___openCLSafeCall(res, __FILE__, __LINE__, __func__)
#else /* defined(__OPENCLCC__) || defined(__MSVC__) */
#define openCLSafeCall(expr) ___openCLSafeCall(expr, __FILE__, __LINE__)
#define openCLVerifyCall(res) ___openCLSafeCall(res, __FILE__, __LINE__)
#endif
namespace cv namespace cv
......
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