问题描述
|
我在堆栈溢出方面遇到了问题,想确切地了解堆栈中的内容。
如何使用GDB检查堆栈框架?是相同的问题,但是
info locals
在这里看起来很好(很少有变量,其中大多数是std :: vectors和std :: maps),所以我不希望堆栈由此溢出。此外,我将堆栈限制设置为32MB,因此应该足够,并且不使用任何递归函数。
是否有一个工具可以显示堆栈的完整内容,可能按大小排序?
解决方法
堆栈溢出最好由特殊的探查器捕获,而不是手动查看ѭ1中的变量。您更有可能是缓冲区溢出而不是堆栈溢出。无论哪种情况,这都是一些分析器的列表,可以帮助您指出问题:
瓦尔格朗德
净化
保险++
电围栏
祝好运!
,即使您没有调用自己的函数,也有可能创建了两个或多个函数相互递归的情况。
一个很好的起点是使用\“ backtrace \”(或简称为\“ bt \”)命令检查当前堆栈帧,而不是堆栈帧列表。如果看到两个或多个函数相互调用的重复模式,则说明相互递归。
,您可以使用backtrace命令检查当前堆栈帧。
,您还可以在gdb中获取当前的堆栈指针(例如,通过运行\'info register \'),然后使用inspect(或\'x \')命令在该位置附近转储内存。请注意,堆栈指针指向堆栈下方,因此您需要从堆栈指针开始转储-N以查看堆栈上的前N个字节。