在 Visual Studio 中监视调用堆栈大小

van*_*nna 7 c++ stack-overflow monitoring callstack visual-studio-2008

有没有办法在 Visual Studio 中监视调用堆栈大小?运行时提供了一个调用堆栈窗口,但不显示堆栈的大小。我正在使用 C++ 并面临堆栈溢出问题。我知道我正在使用的一些递归函数可能有问题,但在解决这些问题之前,我想监视调用堆栈大小以查看发生了什么。

ten*_*our 6

有以下几种方法:

  1. 在观察窗口中检查 ESP。您可以通过@esp在监视窗口中观看来完成此操作。将其与流程开始时的 ESP 进行比较。
  2. 同样,检查第一个/最后一个堆栈帧中堆栈分配变量的地址。

请注意,堆栈通常是向后分配的,因此随着堆栈的增长,ESP 会变得越来越小。


Han*_*ant 6

在这里使用数据断点会很有帮助。无论您碰巧在代码中的哪个位置,只要您在正确的线程上都没有关系,请使用 Debug + New Breakpoint + New Data Breakpoint。在地址框中键入@esp - 250000. 按 F5 继续运行,当可用堆栈空间的四分之一被消耗时,它将在递归内部的某个地方中断。esp 的确切偏移量并不重要。

  • 在 64 位机器上,该寄存器称为“rsp”。 (2认同)