1. 13
  1.  

  2. 3
    • Persistent symbolic breakpoints help a lot. In this case, put a breakpoint at _assert_failed or whatever your C library calls it.
    • Not intended as flamebait but: in a GUI debugger you just have to click on the desired stack frame, instead of typing a buncha commands.
    • Reimplementing assert to directly cause a breakpoint on failure is nice for debugging, but awful for any kind of release or even CI testing. There’s a reason typical implementations log a bunch of output: as forensics. (Yes, I know stdlib assert is disabled in release builds. But tests should mostly be run in debug builds, and many people argue for keeping assertions on in production. I go halfway, with a separate precondition macro that’s always enabled.)