3

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

如何找到堆栈深度?

4

1 回答 1

1

这仅适用于gcc, 和某些平台。我可以在这里重新输入所有文档,但是很容易获得:info gcc如果您至少有 4.7.2 版本,它是 gcc 手册 () 的第 6.48 节,并且它在此处在线。

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

您无法可靠地从中获取堆栈高度__builtin_return_address,但根据文档,__builtin_frame_address当您到达堆栈顶部时将返回 0。

于 2012-12-19T02:32:12.787 回答