本文主要是介绍backtrace 解决gcc16159 bug,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
采用backtrace函数避免gcc 出现的bug 16159。
- backtrace的实现依赖于栈指针(fp寄存器),在gcc编译过程中任何非零的优化等级(-On参数)或加入了栈指针优化参数-fomit-frame-pointer后多将不能正确得到程序栈信息;加上 -g 选项以后创建符号表,关闭所有的优化机制。
- 在编译的时候需要加上-rdynamic选项让链接器将所有符号添加到动态符号表中,这样才能将函数地址翻译成函数名。另外,这个选项不会处理static函数,所以,static函数的符号无法得到。
- 内联函数没有栈帧,它在编译过程中被展开在调用的位置
backtrace 函数的应用
void backtrace_init(void)
{
void *array[64] = {0};
backtrace(array, 64);
return;
}
这篇关于backtrace 解决gcc16159 bug的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!