|
| #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, ...) |
| |
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