Есть доморощенный метод: заполнять стек паттерном (0xDEADBEAF or whatever), гонять программу, потом смотреть на стек. Ещё теоретически можно заставить компилятор записывать максимальную степень заполнения стека в различных точках программы (скажем, каждый раз, когда выделяется память в стеке). Вроде бы некоторые компиляторы могут делать run-time stack overflow check.