在 Visual Studio 2015 调试器中确定每一帧的堆栈大小
Posted
技术标签:
【中文标题】在 Visual Studio 2015 调试器中确定每一帧的堆栈大小【英文标题】:Determine the size of the stack at each frame in the Visual Studio 2015 debugger 【发布时间】:2016-03-10 18:44:53 【问题描述】:我正在查看在 Visual Studio 调试器中停止的 C++ 程序的堆栈帧。我想知道的是与每一帧相关的堆栈深度。有没有办法在 Visual Studio 2015 中做到这一点?堆栈深度是否对应某个寄存器值?
这样做的动机是我在从 Python 调用的 C++ 代码中遇到堆栈溢出异常的问题。堆栈异常不在递归调用的函数中;它在 Python 代码之上的 C++ 代码深度约为 10 级。它是在堆栈上分配一些数组的科学代码,但我认为它们不会太大。我想看看堆栈是否真的接近 this 或其调用者的 1 MB 限制。
【问题讨论】:
它们太大了。 Debug > Windows > Registers, ESP register 是最简单的方法。 @HansPassant -- 这是一个 64 位进程,所以我猜 RSP 是正确的寄存器。谢谢! 【参考方案1】:Debug -> Window -> Registers 查看寄存器。
堆栈指针是 ESP 寄存器或 64 位进程的 RSP。
堆栈(在 NT 上,至少是 64 位)“向下”增长,因此堆栈顶部的寄存器值会更小。
我确实有一个在堆栈上分配近 1MB 数组的方法...
【讨论】:
以上是关于在 Visual Studio 2015 调试器中确定每一帧的堆栈大小的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 2015 调试器中确定每一帧的堆栈大小
Visual Studio 2015 远程调试不兼容平台错误
升级到 Visual Studio 2015 现在无法在调试中打断点
在 Visual Studio 2015 中调试时无法解析参数名称类型 ISession