我想用单元格替换以下函数调用(参考:从 C 中的任何线程获取调用堆栈 https://stackoverflow.com/questions/1310669/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));
}
如何找到堆栈深度?
这仅适用于gcc
,以及在某些平台上。我可以在这里重新输入所有文档,但很容易获得:这是 gcc 手册的第 6.48 节(info gcc
)如果您至少有版本 4.7.2,并且它在线here http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Return-Address.html.
请注意“级别参数必须是常量整数”这句话。这将使循环变得棘手。
您无法可靠地获取堆栈高度__builtin_return_address
,但根据文档__builtin_frame_address
当你到达堆栈顶部时将返回 0。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)