【发布时间】:2019-12-29 23:22:38
【问题描述】:
我想知道 C 中是否有一个函数(我们称之为 int get_stack_depth()),它返回当前在堆栈上执行的函数的数量。例如:
int foo(){
return get_stack_depth();
}
int bar2(){
return get_stack_depth();
}
int bar1(){
return bar2();
}
int bar(){
return bar1();
}
int main(){
get_stack_depth(); // = 0
foo(); // = 1
bar(); // = 3
return 0;
}
我想将它用于调试信息,其中每个 printf 都将包含 get_stack_depth() 缩进以增加可读性。如果这是依赖于编译器,或者依赖于其他任何东西,我会接受所有约束;现在我想知道这是否至少在某个地方得到支持。
编辑:建议副本的答案根本没有帮助我,正如此处接受的答案所暗示的那样,您无法纯粹根据堆栈的大小来确定堆栈上有多少个函数;信息根本不存在。
【问题讨论】:
-
这能回答你的问题吗? How to find stack depth?
-
对于您定义的每个函数,您可以声明一个对您定义的所有函数可见的文件范围变量,并在函数进入时增加它并在从函数返回之前减少它。这是一个丑陋的解决方案,但我认为除此之外不能以便携的方式完成。
-
你可以看到 glibc 为你提供了什么here;没有界面可以准确地告诉您堆栈的深度,但是如果您有上限
backtrace将报告有多少插槽正在使用中。请注意,并非所有函数调用都使用堆栈帧,如文档所示。 -
@rici 谢谢你的链接,我一定会试试的。