diff --git a/src/xrt/state_trackers/oxr/oxr_logger.cpp b/src/xrt/state_trackers/oxr/oxr_logger.cpp index bf30dc24f228f78b54e629df679401471db8337e..eee1f1c323f86d46b49a3896bf71b4623ab88f50 100644 --- a/src/xrt/state_trackers/oxr/oxr_logger.cpp +++ b/src/xrt/state_trackers/oxr/oxr_logger.cpp @@ -16,8 +16,13 @@ #include "oxr_objects.h" #include "oxr_logger.h" +#ifdef _MSC_VER +// needed for __debugbreak() +#include <intrin.h> +#endif // _MSC_VER DEBUG_GET_ONCE_BOOL_OPTION(entrypoints, "OXR_DEBUG_ENTRYPOINTS", false) +DEBUG_GET_ONCE_BOOL_OPTION(break_on_error, "OXR_BREAK_ON_ERROR", false) static const char * oxr_result_to_string(XrResult result); @@ -85,12 +90,22 @@ oxr_error(struct oxr_logger *logger, XrResult result, const char *fmt, ...) fprintf(stderr, " in %s", logger->api_func_name); } + fprintf(stderr, ": "); va_list args; va_start(args, fmt); vfprintf(stderr, fmt, args); va_end(args); fprintf(stderr, "\n"); + if (debug_get_bool_option_break_on_error()) { +/// Trigger a debugger breakpoint. +#ifdef _MSC_VER + __debugbreak(); +#else + __builtin_trap(); +#endif + } + return result; }