diff --git a/include/internal/catch_debugger.h b/include/internal/catch_debugger.h index 4c83efd2..060cbc90 100644 --- a/include/internal/catch_debugger.h +++ b/include/internal/catch_debugger.h @@ -34,9 +34,16 @@ namespace Catch{ #endif #elif defined(CATCH_PLATFORM_LINUX) - #include + // If we can use inline assembler, do it because this allows us to break + // directly at the location of the failing check instead of breaking inside + // raise() called from it, i.e. one stack frame below. + #if defined(__GNUC__) && (defined(__i386) || defined(__x86_64)) + #define CATCH_TRAP() asm volatile ("int $3") + #else // Fall back to the generic way. + #include - #define CATCH_TRAP() raise(SIGTRAP) + #define CATCH_TRAP() raise(SIGTRAP) + #endif #elif defined(_MSC_VER) #define CATCH_TRAP() __debugbreak() #elif defined(__MINGW32__)