GDB调试器和其他工具如何使用调用帧信息来确定活动的函数调用

GDB调试器和其他工具如何使用调用帧信息来确定活动的函数调用

💡 原文英文,约2400词,阅读约需9分钟。
📝

内容提要

DWARF通过调用帧信息(CFI)来重建帧指针,并通过GDB来查找返回地址,从而可以确定当前活动的函数调用。

🎯

关键要点

  • 通过调用帧信息(CFI)重建帧指针,查找返回地址以确定当前活动的函数调用。
  • 调试信息用于映射当前指令指针(IP)与包含它的函数或行之间的关系。
  • 回溯信息提供了导致当前函数和行执行的活动函数调用的完整上下文。
  • 函数激活记录用于存储局部变量,确保每次函数调用都有唯一的位置。
  • 编译器在每次函数调用时生成函数激活记录,并使用处理器栈存储这些记录。
  • 函数激活记录的创建和移除分别由函数的序言和尾声代码处理。
  • 显式帧指针可能导致性能下降,编译器通常会省略帧指针以生成更快的代码。
  • DWARF调用帧信息(CFI)用于生成函数回溯,存储在可执行文件的.eh_frame部分。
  • CFI包含每个函数的帧描述条目(FDE),用于回溯生成过程。
  • CFI的编码设计旨在最小化所需空间,通过公共信息条目(CIE)进一步压缩数据。
  • 示例代码展示了如何使用CFI生成函数的回溯信息。
  • GDB利用CFI信息生成准确的回溯,能够找到返回地址并获取当前保存的参数。
➡️

继续阅读