C++ 在VisualStudio中监视调用堆栈大小
在VisualStudio中是否有监视调用堆栈大小的方法?在运行时提供调用堆栈窗口,但不显示堆栈的大小。我使用C++,并面临堆栈溢出问题。我知道我正在使用的一些递归函数可能有问题,但在解决这些问题之前,我希望监视调用堆栈大小,看看发生了什么。有几种方法:C++ 在VisualStudio中监视调用堆栈大小,c++,visual-studio-2008,monitoring,stack-overflow,callstack,C++,Visual Studio 2008,Monitoring,Stack Overflow,Callstack,在VisualStudio中是否有监视调用堆栈大小的方法?在运行时提供调用堆栈窗口,但不显示堆栈的大小。我使用C++,并面临堆栈溢出问题。我知道我正在使用的一些递归函数可能有问题,但在解决这些问题之前,我希望监视调用堆栈大小,看看发生了什么。有几种方法: 在手表窗口中检查ESP。您可以通过在“监视”窗口中监视@esp来执行此操作。将此与ESP在流程开始时的情况进行比较 类似地,检查第一个/最后一个堆栈帧中堆栈分配变量的地址 请注意,堆栈通常是向后分配的,因此随着堆栈的增长,ESP变得越来越小。在
@esp
来执行此操作。将此与ESP在流程开始时的情况进行比较请注意,堆栈通常是向后分配的,因此随着堆栈的增长,ESP变得越来越小。在这里使用数据断点会很有帮助。无论您在代码中的什么位置,只要您在正确的线程上,使用Debug+新断点+新数据断点都无所谓。在地址框中键入
@esp-250000
。按F5继续运行,当可用堆栈空间的四分之一被占用时,它将在递归内部的某个地方中断。与esp的精确偏移量并不重要。通过“Microsoft推荐的本机规则”代码分析,可以查看您的代码并发现代码中可能溢出堆栈的问题。我不确定它在发现递归问题方面有多好,但它确实在我的代码中发现了一个问题,我使用了一个非常大(1MB)的类的本地实例。在运行时,唯一的错误是堆栈溢出。当然,在堆栈上使用大型对象是个坏主意;您应该只使用小对象和在堆中存储大部分脏衣服的对象
在VS2012中,右键单击项目属性,选择“代码分析”,然后单击复选框以启用代码分析。运行需要几分钟。注意,对于Windows,这似乎不起作用(请参阅:)@esp-250000它是否总是保证消耗四分之一的可用堆栈空间?。我的意思是我的设置可能有不同的堆栈大小。那么,同样的工作在我这边也会起作用吗?。在64位机器上,寄存器称为
rsp
。