24 #ifndef PXR_BASE_TF_DIAGNOSTIC_H 25 #define PXR_BASE_TF_DIAGNOSTIC_H 41 #include "pxr/base/tf/api.h" 43 #if defined(__cplusplus) || defined (doxygen) 46 #include "pxr/base/tf/diagnosticHelper.h" 52 PXR_NAMESPACE_OPEN_SCOPE
85 #define TF_CODING_ERROR(fmt, args) 100 #define TF_RUNTIME_ERROR(fmt, args) 108 #define TF_FATAL_ERROR(fmt, args) 190 #define TF_STATUS(...) 210 #define TF_AXIOM(cond) 222 #define TF_DEV_AXIOM(cond) 283 #define TF_VERIFY(cond [, format, ...]) 291 #if defined(__cplusplus) || defined(doxygen) 309 #define TF_FUNC_NAME() \ 310 ArchGetPrettierFunctionName(__ARCH_FUNCTION__, __ARCH_PRETTY_FUNCTION__) 312 void Tf_TerminateHandler();
314 #if !defined(doxygen) 319 #ifdef TF_CODING_ERROR 320 #undef TF_CODING_ERROR 322 #define TF_CODING_ERROR(...) \ 323 Tf_PostErrorHelper(TF_CALL_CONTEXT, \ 324 TF_DIAGNOSTIC_CODING_ERROR_TYPE, __VA_ARGS__) 326 #ifdef TF_FATAL_CODING_ERROR 327 #undef TF_FATAL_CODING_ERROR 329 #define TF_FATAL_CODING_ERROR \ 330 Tf_DiagnosticHelper(TF_CALL_CONTEXT, \ 331 TF_DIAGNOSTIC_CODING_ERROR_TYPE).IssueFatalError 334 #ifdef TF_CODING_WARNING 335 #undef TF_CODING_WARNING 337 #define TF_CODING_WARNING(...) \ 338 Tf_PostWarningHelper(TF_CALL_CONTEXT, \ 339 TF_DIAGNOSTIC_CODING_ERROR_TYPE, __VA_ARGS__) 341 #ifdef TF_DIAGNOSTIC_WARNING 342 #undef TF_DIAGNOSTIC_WARNING 344 #define TF_DIAGNOSTIC_WARNING \ 345 Tf_DiagnosticHelper(TF_CALL_CONTEXT.Hide(), \ 346 TF_DIAGNOSTIC_WARNING_TYPE).IssueWarning 348 #ifdef TF_RUNTIME_ERROR 349 #undef TF_RUNTIME_ERROR 350 #endif // TF_RUNTIME_ERROR 351 #define TF_RUNTIME_ERROR(...) \ 352 Tf_PostErrorHelper(TF_CALL_CONTEXT, \ 353 TF_DIAGNOSTIC_RUNTIME_ERROR_TYPE, __VA_ARGS__) 355 #ifdef TF_FATAL_ERROR 356 #undef TF_FATAL_ERROR 357 #endif // TF_FATAL_ERROR 358 #define TF_FATAL_ERROR \ 359 Tf_DiagnosticHelper(TF_CALL_CONTEXT, \ 360 TF_DIAGNOSTIC_FATAL_ERROR_TYPE).IssueFatalError 362 #ifdef TF_DIAGNOSTIC_FATAL_ERROR 363 #undef TF_DIAGNOSTIC_FATAL_ERROR 364 #endif // TF_DIAGNOSTIC_FATAL_ERROR 365 #define TF_DIAGNOSTIC_FATAL_ERROR \ 366 Tf_DiagnosticHelper(TF_CALL_CONTEXT, \ 367 TF_DIAGNOSTIC_RUNTIME_ERROR_TYPE).IssueFatalError 369 #ifdef TF_DIAGNOSTIC_NONFATAL_ERROR 370 #undef TF_DIAGNOSTIC_NONFATAL_ERROR 371 #endif // TF_DIAGNOSTIC_NONFATAL_ERROR 372 #define TF_DIAGNOSTIC_NONFATAL_ERROR \ 373 Tf_DiagnosticHelper(TF_CALL_CONTEXT, \ 374 TF_DIAGNOSTIC_WARNING_TYPE).IssueWarning 388 #define TF_WARN(...) \ 389 Tf_PostWarningHelper(TF_CALL_CONTEXT, __VA_ARGS__) 394 #define TF_STATUS(...) \ 395 Tf_PostStatusHelper(TF_CALL_CONTEXT, __VA_ARGS__) 400 #define TF_ERROR(...) \ 401 Tf_PostErrorHelper(TF_CALL_CONTEXT, __VA_ARGS__) 403 #ifdef TF_QUIET_ERROR 404 #undef TF_QUIET_ERROR 406 #define TF_QUIET_ERROR(...) \ 407 Tf_PostQuietlyErrorHelper(TF_CALL_CONTEXT, __VA_ARGS__) 410 #define TF_VERIFY(cond, ...) \ 411 (ARCH_LIKELY(cond) ? true : \ 412 Tf_FailedVerifyHelper(TF_CALL_CONTEXT, # cond, \ 413 Tf_VerifyStringFormat(__VA_ARGS__))) 417 Tf_FailedVerifyHelper(TfCallContext
const &context,
418 char const *condition,
char const *msg);
422 Tf_VerifyStringFormat() {
return nullptr; }
428 #endif // __cplusplus || doxygen 441 struct Tf_DiagnosticHelper {
442 Tf_DiagnosticHelper(TfCallContext
const &context,
449 TfCallContext
const &GetContext()
const {
return _context; }
452 TF_API
void IssueError(std::string
const &msg)
const;
454 TF_API
void IssueFatalError(std::
string const &msg) const;
456 TF_API
void IssueWarning(std::
string const &msg) const;
458 TF_API
void IssueStatus(std::
string const &msg) const;
462 TfCallContext _context;
481 PXR_NAMESPACE_CLOSE_SCOPE
483 #endif // PXR_BASE_TF_DIAGNOSTIC_H Define preprocessor function name macros.
TF_API void TfInstallTerminateAndCrashHandlers()
(Re)install Tf's crash handler.
void TfSetProgramNameForErrors(std::string const &programName)
Sets program name for reporting errors.
#define ARCH_PRINTF_FUNCTION(_fmt, _firstArg)
Macro used to indicate a function takes a printf-like specification.
TfDiagnosticType
Enum describing various diagnostic conditions.
std::string TfGetProgramNameForErrors()
Returns currently set program info.
Stripped down version of diagnostic.h that doesn't define std::string.