UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AssertionMacros.h File Reference

Go to the source code of this file.

Classes

struct  FEnsureHandlerArgs
 
struct  FDebug
 

Namespaces

namespace  ELogVerbosity
 
namespace  UEAsserts_Private
 
namespace  UE
 
namespace  UE::Assert
 
namespace  UE::Assert::Private
 

Macros

#define UE_DEBUG_SECTION
 
#define UE_DEBUG_BREAK_AND_PROMPT_FOR_REMOTE()    if (!FPlatformMisc::IsDebuggerPresent()) { FPlatformMisc::PromptForRemoteDebugging(false); } UE_DEBUG_BREAK();
 
#define _DebugBreakAndPromptForRemote()    UE_DEPRECATED_MACRO(5.1, "Use UE_DEBUG_BREAK_AND_PROMPT_FOR_REMOTE.")
 
#define PLATFORM_BREAK_IF_DESIRED()   if (LIKELY(!GIgnoreDebugger)) { PLATFORM_BREAK(); }
 
#define checkCode(...)
 
#define check(expr)   { CA_ASSUME(expr); }
 
#define checkf(expr, format, ...)   { CA_ASSUME(expr); }
 
#define checkNoEntry()
 
#define checkNoReentry()
 
#define checkNoRecursion()
 
#define verify(expr)   { if(UNLIKELY(!(expr))){ CA_ASSUME(false); } }
 
#define verifyf(expr, format, ...)   { if(UNLIKELY(!(expr))){ CA_ASSUME(false); } }
 
#define unimplemented()   { CA_ASSUME(false); }
 
#define checkSlow(expr)   { CA_ASSUME(expr); }
 
#define checkfSlow(expr, format, ...)   { CA_ASSUME(expr); }
 
#define verifySlow(expr)   { if(UNLIKELY(!(expr))) { CA_ASSUME(false); } }
 
#define ensure( InExpression)   (LIKELY(!!(InExpression)))
 
#define ensureMsgf( InExpression, InFormat, ...)   (LIKELY(!!(InExpression)))
 
#define ensureAlways( InExpression)   (LIKELY(!!(InExpression)))
 
#define ensureAlwaysMsgf(InExpression, InFormat, ...)   (LIKELY(!!(InExpression)))
 
#define GET_ENUMERATOR_NAME_CHECKED(EnumName, EnumeratorName)    (FName(GET_ENUMERATOR_NAME_STRING_VIEW_CHECKED(EnumName, EnumeratorName)))
 
#define GET_ENUMERATOR_NAME_STRING_CHECKED(EnumName, EnumeratorName)    ((void)sizeof(UEAsserts_Private::GetMemberNameCheckedJunk(EnumName::EnumeratorName)), TEXT(#EnumeratorName))
 
#define GET_ENUMERATOR_NAME_STRING_VIEW_CHECKED(EnumName, EnumeratorName)    ((void)sizeof(UEAsserts_Private::GetMemberNameCheckedJunk(EnumName::EnumeratorName)), TEXTVIEW(#EnumeratorName))
 
#define GET_MEMBER_NAME_CHECKED(ClassName, MemberName)    (FName(GET_MEMBER_NAME_STRING_VIEW_CHECKED(ClassName, MemberName)))
 
#define GET_MEMBER_NAME_STRING_CHECKED(ClassName, MemberName)    ((void)sizeof(UEAsserts_Private::GetMemberNameCheckedJunk(((ClassName*)0)->MemberName)), TEXT(#MemberName))
 
#define GET_MEMBER_NAME_STRING_VIEW_CHECKED(ClassName, MemberName)    ((void)sizeof(UEAsserts_Private::GetMemberNameCheckedJunk(((ClassName*)0)->MemberName)), TEXTVIEW(#MemberName))
 
#define GET_FUNCTION_NAME_CHECKED(ClassName, FunctionName)    (FName(GET_FUNCTION_NAME_STRING_VIEW_CHECKED(ClassName, FunctionName)))
 
#define GET_FUNCTION_NAME_STRING_CHECKED(ClassName, FunctionName)    ((void)sizeof(&ClassName::FunctionName), TEXT(#FunctionName))
 
#define GET_FUNCTION_NAME_STRING_VIEW_CHECKED(ClassName, FunctionName)    ((void)sizeof(&ClassName::FunctionName), TEXTVIEW(#FunctionName))
 
#define GET_FUNCTION_NAME_CHECKED_OneParam(ClassName, FunctionName, ArgType)    (FName(GET_FUNCTION_NAME_STRING_CHECKED_OneParam(ClassName, FunctionName, ArgType)))
 
#define GET_FUNCTION_NAME_CHECKED_TwoParams(ClassName, FunctionName, ArgType1, ArgType2)    (FName(GET_FUNCTION_NAME_STRING_CHECKED_TwoParams(ClassName, FunctionName, ArgType1, ArgType2)))
 
#define GET_FUNCTION_NAME_CHECKED_ThreeParams(ClassName, FunctionName, ArgType1, ArgType2, ArgType3)    (FName(GET_FUNCTION_NAME_STRING_CHECKED_ThreeParams(ClassName, FunctionName, ArgType1, ArgType2, ArgType3)))
 
#define GET_FUNCTION_NAME_CHECKED_FourParams(ClassName, FunctionName, ArgType1, ArgType2, ArgType3, ArgType4)    (FName(GET_FUNCTION_NAME_STRING_CHECKED_FourParams(ClassName, FunctionName, ArgType1, ArgType2, ArgType3, ArgType4)))
 
#define GET_FUNCTION_NAME_STRING_CHECKED_OneParam(ClassName, FunctionName, ArgType)    ((void)sizeof((std::declval<ClassName&>().FunctionName(std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType)>()), (int)0)), TEXT(#FunctionName))
 
#define GET_FUNCTION_NAME_STRING_CHECKED_TwoParams(ClassName, FunctionName, ArgType1, ArgType2)    ((void)sizeof((std::declval<ClassName&>().FunctionName(std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType1)>(), std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType2)>()), (int)0)), TEXT(#FunctionName))
 
#define GET_FUNCTION_NAME_STRING_CHECKED_ThreeParams(ClassName, FunctionName, ArgType1, ArgType2, ArgType3)    ((void)sizeof((std::declval<ClassName&>().FunctionName(std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType1)>(), std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType2)>(), std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType3)>()), (int)0)), TEXT(#FunctionName))
 
#define GET_FUNCTION_NAME_STRING_CHECKED_FourParams(ClassName, FunctionName, ArgType1, ArgType2, ArgType3, ArgType4)    ((void)sizeof((std::declval<ClassName&>().FunctionName(std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType1)>(), std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType2)>(), std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType3)>(), std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType4)>()), (int)0)), TEXT(#FunctionName))
 
#define LowLevelFatalError(Format, ...)
 

Functions

CORE_API void PrintScriptCallstack ()
 
CORE_API TFunction< bool(const FEnsureHandlerArgs &Args)> SetEnsureHandler (TFunction< bool(const FEnsureHandlerArgs &Args)> EnsureHandler)
 
CORE_API TFunction< bool(const FEnsureHandlerArgs &Args)> GetEnsureHandler ()
 
template<typename RetType = void, class InnerType , typename... ArgTypes>
RetType UE_COLD UE_DEBUG_SECTION DispatchCheckVerify (InnerType &&Inner, ArgTypes const &... Args)
 
template<typename T >
bool UEAsserts_Private::GetMemberNameCheckedJunk (const T &)
 
template<typename T >
bool UEAsserts_Private::GetMemberNameCheckedJunk (const volatile T &)
 
template<typename R , typename ... Args>
bool UEAsserts_Private::GetMemberNameCheckedJunk (R(*)(Args...))
 
CORE_API void UE_COLD UE_DEBUG_SECTION VARARGS UE::Assert::Private::ProcessLowLevelFatalError (const ANSICHAR *File, int32 Line, const TCHAR *Format,...)
 
template<typename... ArgTypes>
UE_REWRITE void LowLevelFatalErrorHandler (const ANSICHAR *File, int32 Line, const TCHAR *Format=TEXT(""), ArgTypes... Args)
 

Variables

CORE_API bool GIgnoreDebugger
 

Macro Definition Documentation

◆ _DebugBreakAndPromptForRemote

#define _DebugBreakAndPromptForRemote ( )     UE_DEPRECATED_MACRO(5.1, "Use UE_DEBUG_BREAK_AND_PROMPT_FOR_REMOTE.")

◆ check

#define check (   expr)    { CA_ASSUME(expr); }

◆ checkCode

#define checkCode (   ...)

◆ checkf

#define checkf (   expr,
  format,
  ... 
)    { CA_ASSUME(expr); }

◆ checkfSlow

#define checkfSlow (   expr,
  format,
  ... 
)    { CA_ASSUME(expr); }

◆ checkNoEntry

#define checkNoEntry ( )

◆ checkNoRecursion

#define checkNoRecursion ( )

◆ checkNoReentry

#define checkNoReentry ( )

◆ checkSlow

#define checkSlow (   expr)    { CA_ASSUME(expr); }

◆ ensure

#define ensure (   InExpression)    (LIKELY(!!(InExpression)))

ensure() can be used to test for non-fatal errors at runtime

Rather than crashing, an error report (with a full call stack) will be logged and submitted to the crash server. This is useful when you want runtime code verification but you're handling the error case anyway.

Note: ensure() can be nested within conditionals!

Example:

if (ensure(InObject != nullptr))
{
    InObject->Modify();
}

This code is safe to execute as the pointer dereference is wrapped in a non-nullptr conditional block, but you still want to find out if this ever happens so you can avoid side effects. Using ensure() here will force a crash report to be generated without crashing the application (and potentially causing editor users to lose unsaved work.)

ensure() resolves to just evaluate the expression when DO_CHECK is 0 (typically shipping or test builds).

By default a given call site will only print the callstack and submit the 'crash report' the first time an ensure is hit in a session; ensureAlways can be used instead if you want to handle every failure

◆ ensureAlways

#define ensureAlways (   InExpression)    (LIKELY(!!(InExpression)))

◆ ensureAlwaysMsgf

#define ensureAlwaysMsgf (   InExpression,
  InFormat,
  ... 
)    (LIKELY(!!(InExpression)))

◆ ensureMsgf

#define ensureMsgf (   InExpression,
  InFormat,
  ... 
)    (LIKELY(!!(InExpression)))

◆ GET_ENUMERATOR_NAME_CHECKED

#define GET_ENUMERATOR_NAME_CHECKED (   EnumName,
  EnumeratorName 
)     (FName(GET_ENUMERATOR_NAME_STRING_VIEW_CHECKED(EnumName, EnumeratorName)))

◆ GET_ENUMERATOR_NAME_STRING_CHECKED

#define GET_ENUMERATOR_NAME_STRING_CHECKED (   EnumName,
  EnumeratorName 
)     ((void)sizeof(UEAsserts_Private::GetMemberNameCheckedJunk(EnumName::EnumeratorName)), TEXT(#EnumeratorName))

◆ GET_ENUMERATOR_NAME_STRING_VIEW_CHECKED

#define GET_ENUMERATOR_NAME_STRING_VIEW_CHECKED (   EnumName,
  EnumeratorName 
)     ((void)sizeof(UEAsserts_Private::GetMemberNameCheckedJunk(EnumName::EnumeratorName)), TEXTVIEW(#EnumeratorName))

◆ GET_FUNCTION_NAME_CHECKED

#define GET_FUNCTION_NAME_CHECKED (   ClassName,
  FunctionName 
)     (FName(GET_FUNCTION_NAME_STRING_VIEW_CHECKED(ClassName, FunctionName)))

◆ GET_FUNCTION_NAME_CHECKED_FourParams

#define GET_FUNCTION_NAME_CHECKED_FourParams (   ClassName,
  FunctionName,
  ArgType1,
  ArgType2,
  ArgType3,
  ArgType4 
)     (FName(GET_FUNCTION_NAME_STRING_CHECKED_FourParams(ClassName, FunctionName, ArgType1, ArgType2, ArgType3, ArgType4)))

◆ GET_FUNCTION_NAME_CHECKED_OneParam

#define GET_FUNCTION_NAME_CHECKED_OneParam (   ClassName,
  FunctionName,
  ArgType 
)     (FName(GET_FUNCTION_NAME_STRING_CHECKED_OneParam(ClassName, FunctionName, ArgType)))

◆ GET_FUNCTION_NAME_CHECKED_ThreeParams

#define GET_FUNCTION_NAME_CHECKED_ThreeParams (   ClassName,
  FunctionName,
  ArgType1,
  ArgType2,
  ArgType3 
)     (FName(GET_FUNCTION_NAME_STRING_CHECKED_ThreeParams(ClassName, FunctionName, ArgType1, ArgType2, ArgType3)))

◆ GET_FUNCTION_NAME_CHECKED_TwoParams

#define GET_FUNCTION_NAME_CHECKED_TwoParams (   ClassName,
  FunctionName,
  ArgType1,
  ArgType2 
)     (FName(GET_FUNCTION_NAME_STRING_CHECKED_TwoParams(ClassName, FunctionName, ArgType1, ArgType2)))

◆ GET_FUNCTION_NAME_STRING_CHECKED

#define GET_FUNCTION_NAME_STRING_CHECKED (   ClassName,
  FunctionName 
)     ((void)sizeof(&ClassName::FunctionName), TEXT(#FunctionName))

◆ GET_FUNCTION_NAME_STRING_CHECKED_FourParams

#define GET_FUNCTION_NAME_STRING_CHECKED_FourParams (   ClassName,
  FunctionName,
  ArgType1,
  ArgType2,
  ArgType3,
  ArgType4 
)     ((void)sizeof((std::declval<ClassName&>().FunctionName(std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType1)>(), std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType2)>(), std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType3)>(), std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType4)>()), (int)0)), TEXT(#FunctionName))

◆ GET_FUNCTION_NAME_STRING_CHECKED_OneParam

#define GET_FUNCTION_NAME_STRING_CHECKED_OneParam (   ClassName,
  FunctionName,
  ArgType 
)     ((void)sizeof((std::declval<ClassName&>().FunctionName(std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType)>()), (int)0)), TEXT(#FunctionName))

◆ GET_FUNCTION_NAME_STRING_CHECKED_ThreeParams

#define GET_FUNCTION_NAME_STRING_CHECKED_ThreeParams (   ClassName,
  FunctionName,
  ArgType1,
  ArgType2,
  ArgType3 
)     ((void)sizeof((std::declval<ClassName&>().FunctionName(std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType1)>(), std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType2)>(), std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType3)>()), (int)0)), TEXT(#FunctionName))

◆ GET_FUNCTION_NAME_STRING_CHECKED_TwoParams

#define GET_FUNCTION_NAME_STRING_CHECKED_TwoParams (   ClassName,
  FunctionName,
  ArgType1,
  ArgType2 
)     ((void)sizeof((std::declval<ClassName&>().FunctionName(std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType1)>(), std::declval<PREPROCESSOR_REMOVE_OPTIONAL_PARENS(ArgType2)>()), (int)0)), TEXT(#FunctionName))

◆ GET_FUNCTION_NAME_STRING_VIEW_CHECKED

#define GET_FUNCTION_NAME_STRING_VIEW_CHECKED (   ClassName,
  FunctionName 
)     ((void)sizeof(&ClassName::FunctionName), TEXTVIEW(#FunctionName))

◆ GET_MEMBER_NAME_CHECKED

#define GET_MEMBER_NAME_CHECKED (   ClassName,
  MemberName 
)     (FName(GET_MEMBER_NAME_STRING_VIEW_CHECKED(ClassName, MemberName)))

◆ GET_MEMBER_NAME_STRING_CHECKED

#define GET_MEMBER_NAME_STRING_CHECKED (   ClassName,
  MemberName 
)     ((void)sizeof(UEAsserts_Private::GetMemberNameCheckedJunk(((ClassName*)0)->MemberName)), TEXT(#MemberName))

◆ GET_MEMBER_NAME_STRING_VIEW_CHECKED

#define GET_MEMBER_NAME_STRING_VIEW_CHECKED (   ClassName,
  MemberName 
)     ((void)sizeof(UEAsserts_Private::GetMemberNameCheckedJunk(((ClassName*)0)->MemberName)), TEXTVIEW(#MemberName))

◆ LowLevelFatalError

#define LowLevelFatalError (   Format,
  ... 
)
Value:
{ \
::UE::Assert::Private::ProcessLowLevelFatalError(__FILE__, __LINE__, Format, ##__VA_ARGS__); \
}
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127

◆ PLATFORM_BREAK_IF_DESIRED

#define PLATFORM_BREAK_IF_DESIRED ( )    if (LIKELY(!GIgnoreDebugger)) { PLATFORM_BREAK(); }

◆ UE_DEBUG_BREAK_AND_PROMPT_FOR_REMOTE

#define UE_DEBUG_BREAK_AND_PROMPT_FOR_REMOTE ( )     if (!FPlatformMisc::IsDebuggerPresent()) { FPlatformMisc::PromptForRemoteDebugging(false); } UE_DEBUG_BREAK();

◆ UE_DEBUG_SECTION

#define UE_DEBUG_SECTION

◆ unimplemented

#define unimplemented ( )    { CA_ASSUME(false); }

◆ verify

#define verify (   expr)    { if(UNLIKELY(!(expr))){ CA_ASSUME(false); } }

◆ verifyf

#define verifyf (   expr,
  format,
  ... 
)    { if(UNLIKELY(!(expr))){ CA_ASSUME(false); } }

◆ verifySlow

#define verifySlow (   expr)    { if(UNLIKELY(!(expr))) { CA_ASSUME(false); } }

Function Documentation

◆ DispatchCheckVerify()

template<typename RetType = void, class InnerType , typename... ArgTypes>
RetType UE_COLD UE_DEBUG_SECTION DispatchCheckVerify ( InnerType &&  Inner,
ArgTypes const &...  Args 
)

◆ GetEnsureHandler()

CORE_API TFunction< bool(const FEnsureHandlerArgs &Args)> GetEnsureHandler ( )

◆ LowLevelFatalErrorHandler()

template<typename... ArgTypes>
UE_REWRITE void LowLevelFatalErrorHandler ( const ANSICHAR File,
int32  Line,
const TCHAR Format = TEXT(""),
ArgTypes...  Args 
)

◆ PrintScriptCallstack()

CORE_API void PrintScriptCallstack ( )

C Exposed function to print the callstack to ease debugging needs. In an editor build you can call this in the Immediate Window by doing, {,,UnrealEditor-Core}PrintScriptCallstack()

◆ SetEnsureHandler()

CORE_API TFunction< bool(const FEnsureHandlerArgs &Args)> SetEnsureHandler ( TFunction< bool(const FEnsureHandlerArgs &Args)>  EnsureHandler)

Sets the thead_local ensure handler callback returning true skips the regular ensure handling logic returns the previous handler which maybe nullptr

Variable Documentation

◆ GIgnoreDebugger

CORE_API bool GIgnoreDebugger
extern

Whether we should ignore the attached debugger.