Search code examples
c++cgdbcygwin

Chromium `debugger` equivalent, on `gdb` for Cygwin?


How do people trigger a breakpoint on gdb (for Cygwin, specifically) from the very source code?

Like when a JS script has the debugger word in it and Chromium dev tools trigger stop for debugging?


Solution

  • Here's how SDL2 implements this feature:

    #if defined(_MSC_VER)
    /* Don't include intrin.h here because it contains C++ code */
        extern void __cdecl __debugbreak(void);
        #define SDL_TriggerBreakpoint() __debugbreak()
    #elif ( (!defined(__NACL__)) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))) )
        #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" )
    #elif defined(__386__) && defined(__WATCOMC__)
        #define SDL_TriggerBreakpoint() { _asm { int 0x03 } }
    #elif defined(HAVE_SIGNAL_H) && !defined(__WATCOMC__)
        #include <signal.h>
        #define SDL_TriggerBreakpoint() raise(SIGTRAP)
    #else
        /* How do we trigger breakpoints on this platform? */
        #define SDL_TriggerBreakpoint()
    #endif
    

    The conditionals should probably resolve to __asm__ __volatile__ ( "int $3\n\t" ) on Cygwin.