近来遇到一个问题是如何看运行程序的堆栈占用大小,想到的一个办法是:利用寄存器值,rsp
栈顶指针和rbp
指针,获得栈空间实时大小。
步骤:
- 设置断点
- 显示
info registers rsp
栈顶指针 - 利用
bt
命令显示当前堆栈 - 根据显示的堆栈编号,使用
frame $frameNo
命令切换堆栈层次到堆栈的底部 - 继续使用
info registers rbp
显示栈底指针 - 利用
python
做计算器,将两次地址值相减,就得到运行堆栈的大致大小
建议断点设置在堆栈的最深处,或某些大栈空间占用的场景
注意事项:
- 此操作步骤适合
64
位环境,32位环境仅是寄存器值名字的不同 - 程序运行栈空间,不应该太满,需要有预留空间,从而引发栈溢出问题