在调试期间或我们的代码遇到异常时,我eh_frame
需要使用红色。stack unwinding
现在我的问题是,调试器不能只是遍历堆栈并通过查找rbp
被推送或弹出来找出帧之间的边界吗?为什么我们需要发出额外的调试信息?
在调试期间或我们的代码遇到异常时,我eh_frame
需要使用红色。stack unwinding
现在我的问题是,调试器不能只是遍历堆栈并通过查找rbp
被推送或弹出来找出帧之间的边界吗?为什么我们需要发出额外的调试信息?
并非所有函数都有帧指针。在这样的函数中,rbp
可以用来做别的事情,而 DWARF 数据用来描述如何获取规范的帧地址和返回地址。在某种程度上,DWARF 还允许描述一些编译器用于本地函数的非标准调用约定(它们在外部不可见,因此 ABI 无关紧要)。
可能你是对的,这部分对于堆栈展开不是那么必要,请参考这个研究。但是 eh_frame 也被一些语言用来处理异常,我认为在任何地方都包含它是非常必要的。