【发布时间】:2010-10-29 11:47:43
【问题描述】:
许多 C/C++/Fortran 和其他程序员都会遇到“堆栈溢出”错误。 我的问题是,是否有工具、程序或简单的代码 sn-p 允许我们在程序运行时监视或检查堆栈的大小?这可能有助于查明堆栈在何处累积并最终导致溢出。
【问题讨论】:
标签: size stack-overflow monitor
许多 C/C++/Fortran 和其他程序员都会遇到“堆栈溢出”错误。 我的问题是,是否有工具、程序或简单的代码 sn-p 允许我们在程序运行时监视或检查堆栈的大小?这可能有助于查明堆栈在何处累积并最终导致溢出。
【问题讨论】:
标签: size stack-overflow monitor
看看这个question。接受的答案引用了 Raymond Chen:
If you have to ask, you're probably doing something wrong.
如果您确实需要这样做,那么解决方案/工具将取决于平台。一个简单的技巧是用已知的字节值(例如 AA)填充堆栈,并监视没有该值的第一个字节的位置。这将为您提供使用的最大堆栈大小,而不是当前堆栈大小。
【讨论】:
我不知道是否有程序可以为您执行此操作,但您可以轻松地检查堆栈指针所在的函数内部(至少在 C 和 C++ 中)。只需查看任何变量的内存位置即可。它不会是确切的位置,但应该在几个字节内(这对您的目的来说很好),因为局部变量是在堆栈上定义的。如果您想要确切的值,我相信您可以通过组装获得。
不过,当程序崩溃时,只查看堆栈跟踪可能会更容易。
【讨论】: