我不知道有什么好的工具,但作为最后的手段,您可以在应用程序中包含一些代码来检查它,类似于以下内容:
__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
}