正在检查堆栈
Examining the Stack
我遇到堆栈溢出的问题,想看看堆栈上的内容到底是什么。
如何使用GDB检查堆栈框架?是一个相同的问题,但是info locals
在这里看起来很好(很少有变量,大多数是std::vectors和std::maps),所以我不希望堆栈从中溢出。此外,我已经将堆栈限制设置为32MB,所以这应该是足够的,并且不使用递归函数。
有没有一个工具可以显示堆栈的完整内容,可能是按大小排序的?
堆栈溢出最好由特殊的分析器捕获,而不是手动查看gdb
中的变量。更有可能是缓冲区溢出,而不是堆栈溢出。在任何一种情况下,这里都列出了一些可以帮助您指出问题的分析器:
- Valgrind
- 净化
- 保险++
- 电动围栏
祝你好运!
即使您没有调用自己的函数,也有可能创建了两个或多个函数相互递归的情况。
一个好的起点不是检查当前堆栈帧,而是使用"backtrace"(简称"bt")命令检查堆栈帧列表。如果您看到两个或多个函数相互调用的重复模式,那么您就有了相互递归。
您可以使用backtrace命令检查当前堆栈帧。
您还可以在gdb中获取当前堆栈指针(例如,通过运行"info registers"),然后使用检查(或"x")命令转储该位置周围的内存。只需注意堆栈指针指向堆栈下方的,因此您需要从堆栈指针-N开始转储,以查看堆栈上的前N个字节。
相关文章:
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- 是否可以检查悬挂光纤的调用堆栈?
- 使用堆栈从黑客等级中解决平衡括号检查的错误
- 运行时检查失败 #2 - 变量"e"周围的堆栈已损坏。发生
- 运行时检查失败 #2 - 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 - 变量"l1"周围的堆栈已损坏
- C++:此代码可以编译,但引发运行时检查失败 #2 - 围绕变量周围的堆栈'num'已损坏。发生
- 运行时检查失败 - 变量周围的堆栈已损坏
- 是否可以检查存储在堆栈上的单词是否是回文,而C++中没有任何附加数据结构
- 如何在 Linux 运行时检查堆栈使用情况?
- 调试:运行时检查失败 #2 - 变量"LoggerThread"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量周围的堆栈'k'已损坏
- 运行时检查失败 #2 - 变量"数字选择"周围的堆栈已损坏
- 运行时间检查:变量周围的堆栈已损坏
- 运行时检查失败#2 - 变量周围的堆栈'myArray'已损坏.- 似乎无法弄清楚如何删除此错误
- 运行时检查失败 #2 - 变量周围的堆栈'normalIndex'已损坏
- 无锁的堆栈:在POP()期间检查危险指针时可见性问题
- C 程序用于使用堆栈检查正确的HTML标签
- 错误:运行时检查失败 #2 - 变量周围的堆栈已损坏
- 布尔计算器如何使用堆栈检查用户输入