c++clinuxgdb

Set breakpoint in C or C++ code programmatically for gdb on Linux


How can I set a breakpoint in C or C++ code programatically that will work for gdb on Linux?

I.e.:

int main(int argc, char** argv)
{
    /* set breakpoint here! */
    int a = 3;
    a++;  /*  In gdb> print a;  expect result to be 3 */
    return 0;
}

Solution

  • One way is to signal an interrupt:

    #include <csignal>
    
    // Generate an interrupt
    std::raise(SIGINT);
    

    In C:

    #include <signal.h>
    raise(SIGINT);
    

    UPDATE: Microsoft Docs says that Windows doesn't really support SIGINT, so if portability is a concern, you're probably better off using SIGABRT.

    SIGINT is not supported for any Win32 application. When a CTRL+C interrupt occurs, Win32 operating systems generate a new thread to specifically handle that interrupt. This can cause a single-thread application, such as one in UNIX, to become multithreaded and cause unexpected behavior.