许多C / C ++ / Fortran和其他程序员会遇到“堆栈溢出”错误。 我的问题是,是否有一个工具,一个程序或一个简单的代码片段,使我们能够监视或检查堆栈大小的程序运行时?这可能是有帮助精确定位堆被累积并最终导致溢出的位置。

有帮助吗?

解决方案

我不知道是否有一个程序,它会为你做,但你可以很容易地检查函数内部的栈指针是(至少在C和C ++)。只要看看任何变量的存储位置。这不会是准确位置,但应该是几个字节(这是罚款的目的)中,由于局部变量是在栈上定义。如果你想要的精确值,你可以得到,通过组装相信。

这可能是更容易只看堆栈跟踪时,程序崩溃,虽然。

其他提示

看一看这个问题。接受答案引用雷蒙德陈:

If you have to ask, you're probably doing something wrong.

如果你一定要做到这一点,那么解决方案/工具将依赖于平台。一个简单的技巧是填补与已知的字节值(例如AA)堆栈和监测不具有该值的第一个字节的位置。这会给你的最大堆栈大小使用,而不是当前堆栈大小。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top