确定 Visual Studio 2015 调试器中每一帧的堆栈大小

ant*_*oft 5 c++ debugging visual-studio

我正在查看在 Visual Studio 调试器中停止的 C++ 程序的堆栈帧。我想知道的是与每一帧相关的堆栈深度。有没有办法在 Visual Studio 2015 中做到这一点?堆栈深度是否对应于某个寄存器值?

这样做的动机是我在从 Python 调用的 C++ 代码中遇到了堆栈溢出异常的问题。堆栈异常不在递归调用的函数中;它位于 Python 代码之上的 C++ 代码深度约 10 层。确实在堆栈上分配了一些数组是科学代码,但我不认为它们太大。我想看看堆栈是否真的接近这个或它的调用者的 1 MB 限制。

ant*_*oft 2

Debug -> Window -> Registers 查看寄存器。

堆栈指针是 64 位进程的 ESP 寄存器或 RSP。

堆栈(在 NT 上,至少 64 位)“向下”增长,因此堆栈顶部的寄存器值会较小。

我确实有一个在堆栈上分配近 1MB 数组的方法......