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


被折叠的 条评论
为什么被折叠?



