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;
 }