大佬教程收集整理的这篇文章主要介绍了c – 调试堆栈损坏,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道如何使用Visual studio 2010找到(调试)这样的堆栈损坏代码?
以下是一些导致堆栈问题的代码的例子,我会如何找到不那么明显的这类腐败案例?
void foo() { int i = 10; int *p = &i; p[-2] = 100; }
更新
腐败的价值必须是稳定的(例如,在你的例子中,当腐败发生时,它始终是100),或者至少可以在一个简单的表达式中容易地识别出来
>腐败必须发生在堆栈上的特定地址
腐败的价值是非常不寻常的,你不会被一大堆的误报
请注意,第二个条件似乎不太可能乍一看,因为根据运行时操作,堆栈可以以许多不同的方式使用.然而,堆栈使用通常是非常确定的.问题是,特定的堆栈位置可以用于许多不同的事情,问题是真正的项目#3.
无论如何,如果您的错误具有这些特征,您应该识别被破坏的堆栈地址(或其中一个),然后为写入该地址设置一个内存断点,只有当写入的值为腐败的价值.在visual studio中,您可以通过在“断点”窗口中创建“新建数据断点…”,然后右键单击断点来设置条件.
如果你最终得到太多的误报,那么这可能有助于缩小断点的范围,使其被禁用,直到执行路径中的某个点更接近错误(如果你可以识别这样的时间),或者设置命中计数高到足以消除大部分假阳性.
一个额外的复杂性是堆栈的地址可能会从运行变为运行 – 在这种情况下,您必须小心在每次运行时设置断点(地址的较低位应该相同).
以上是大佬教程为你收集整理的c – 调试堆栈损坏全部内容,希望文章能够帮你解决c – 调试堆栈损坏所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。