core
backtrace
addr2line
- backtrace的实现依赖于栈指针(fp寄存器),在gcc编译过程中任何非零的优化等级(
-On
参数)或加入了栈指针优化参数-fomit-frame-pointer
后多将不能正确得到程序栈信息; - backtrace_symbols的实现需要符号名称的支持,在gcc编译过程中需要加入
-rdynamic
参数; - 内联函数没有栈帧,它在编译过程中被展开在调用的位置;
- 尾调用优化(Tail-call Optimization)将复用当前函数栈,而不再生成新的函数栈,这将导致栈信息不能正确被获取。