В Unix вы можете установить альтернативный стек сигналов и использовать его для обнаружения переполнения стека (после бомбардировки). Когда ваш поток сталкивается с переполнением стека (при условии, что вы или операционная система помещают туда защитную страницу), вы можете посмотреть регистр стека в sigcontext_t, чтобы узнать, почему это так.
Если вы хотите программно предотвратить переполнение стека, выделите свой собственный стек потоков и затем периодически измеряйте значение указателя стека (вам придется иметь дело с непереносимыми проблемами, где находится база стека и как делать выборку указатель стека). Для однопоточной программы вы можете использовать основание стека в качестве выборки в main, по сравнению с ulimit стека процессов, чтобы увидеть, заходите ли вы слишком далеко.
Это все непереносимо, но возможно.