有没有办法监视Visual Studio中的调用堆栈大小?运行时提供调用堆栈窗口,但不显示堆栈的大小。我正在使用C ++并面临堆栈溢出问题。我知道我正在使用的一些递归函数可能有问题,但在解决这些问题之前,我想监视调用堆栈大小以查看发生了什么。
答案 0 :(得分:4)
有几种方法:
@esp
来执行此操作。将此与ESP在流程开始时的情况相比较。请注意,堆栈通常是向后分配的,因此随着堆栈的增长,ESP变得越来越小。
答案 1 :(得分:4)
使用数据断点在这里很有帮助。无论你碰巧在代码中,只要你在正确的线程上,使用Debug + New Breakpoint + New Data Breakpoint就没关系。在地址栏中输入@esp - 250000
。按F5继续运行,当消耗了四分之一的可用堆栈空间时,它将在递归内的某处断开。与esp的确切偏移并不重要。
答案 2 :(得分:0)
微软推荐的原生规则"代码分析可以查看您的代码并查找可能溢出堆栈的代码问题。我不确定它在查找递归问题方面有多好,但它确实在我的代码中发现了一个问题,我使用的是一个非常大的类(1MB)的本地实例。在运行时,唯一的错误是堆栈溢出。当然,在堆栈上使用大型对象是个坏主意;你应该只使用那些将大部分脏衣服存放在堆上的小物件和物品。
在VS2012中,右键单击项目属性,然后选择代码分析,然后单击启用代码分析复选框。运行需要几分钟。