Я не знаю каких-либо хороших инструментов, но в качестве последнего средства вы можете включить в свое приложение некоторый код, чтобы проверить его, подобно следующему:
__thread void* stack_start;
__thread long stack_max_size = 0L;
void check_stack_size() {
// address of 'nowhere' approximates end of stack
char nowhere;
void* stack_end = (void*)&nowhere;
// may want to double check stack grows downward on your platform
long stack_size = (long)stack_start - (long)stack_end;
// update max_stack_size for this thread
if (stack_size > stack_max_size)
stack_max_size = stack_size;
}
Функция check_stack_size () должна вызываться в некоторых из наиболее глубоко вложенных функций.
Тогда, как последний оператор в потоке, вы можете вывести где-нибудь stack_max_size.
Переменная stack_start должна быть инициализирована в начале вашего потока:
void thread_proc() {
char nowhere;
stack_start = (void*)&nowhere;
// do stuff including calls to check_stack_size()
// in deeply nested functions
// output stack_max_size here
}