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;
}


 

猜你喜欢

转载自blog.csdn.net/ttood/article/details/89555152
今日推荐