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"
52PXR_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__)
312void Tf_TerminateHandler();
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
351#define TF_RUNTIME_ERROR(...) \
352 Tf_PostErrorHelper(TF_CALL_CONTEXT, \
353 TF_DIAGNOSTIC_RUNTIME_ERROR_TYPE, __VA_ARGS__)
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
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
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__)
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__)))
417Tf_FailedVerifyHelper(TfCallContext
const &context,
418 char const *condition,
char const *msg);
422Tf_VerifyStringFormat() {
return nullptr; }
441struct 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;
481PXR_NAMESPACE_CLOSE_SCOPE
#define ARCH_PRINTF_FUNCTION(_fmt, _firstArg)
Macro used to indicate a function takes a printf-like specification.
Stripped down version of diagnostic.h that doesn't define std::string.
TfDiagnosticType
Enum describing various diagnostic conditions.
Define preprocessor function name macros.
void TfSetProgramNameForErrors(std::string const &programName)
Sets program name for reporting errors.
std::string TfGetProgramNameForErrors()
Returns currently set program info.
TF_API void TfInstallTerminateAndCrashHandlers()
(Re)install Tf's crash handler.