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.)
_assert_failed
or whatever your C library calls it.precondition
macro that’s always enabled.)