如何找到堆栈深度?

时间:2012-12-19 01:42:19

标签: c debugging

我想用调用替换以下函数调用(参考: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));
}

如何找到堆栈深度?

1 个答案:

答案 0 :(得分:1)

这仅适用于gcc以及某些平台。我可以在这里重新输入所有文档,但它很容易得到:如果你的版本是4.7.2,那么它是gcc手册的第6.48节(info gcc),并且它是在线here。 / p>

注意句子“level参数必须是一个常量整数。”这将使循环变得棘手。

您无法从__builtin_return_address可靠地获得堆叠高度,但根据文档__builtin_frame_address,当您点击堆栈顶部时,它将返回0。