我想用调用替换以下函数调用(参考:Get call stack from any thread within C)
int calla()
{
printf("Inside calla\n");
printf("A1=%x\n",__builtin_return_address (0));
printf("A2=%x\n",__builtin_return_address (1) );
printf("A3=%x\n",__builtin_return_address (2) );
}
int callb()
{
int i,j;
j = stackdepth();
for (i=0 ; i<j ;i++)
printf("%x\n",__builtin_return_address (i));
}
如何找到堆栈深度?
答案 0 :(得分:1)
这仅适用于gcc
以及某些平台。我可以在这里重新输入所有文档,但它很容易得到:如果你的版本是4.7.2,那么它是gcc手册的第6.48节(info gcc
),并且它是在线here。 / p>
注意句子“level参数必须是一个常量整数。”这将使循环变得棘手。
您无法从__builtin_return_address
可靠地获得堆叠高度,但根据文档__builtin_frame_address
,当您点击堆栈顶部时,它将返回0。