一次堆破坏的调试经历

在调试vc程序时遇到堆破坏问题,通过输出和观察内存未能找到原因。在交付前,问题再次出现。使用PageHeap工具,尝试了Normal和Full模式,最终在Full模式下成功复现并定位问题,发现是类指针转换错误导致的堆破坏。解决方案是在遇到此类问题时,直接使用PageHeap Full模式进行调试。
摘要由CSDN通过智能技术生成

过程是这样的,在vc debug的过程中,突然弹出了一个assert窗口:

 

Windows has triggered a breakpoint in cs.exe.

This may be due to a corruption of the heap, which indicates a bug in cs.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while cs.exe has focus.

 

查看output输出:

Heap missing last entry in committed range near e664630

Windows has triggered a breakpoint in cs.exe.

 

This may be due to a corruption of the heap, which indicates a bug in cs.exe or any of the DLLs it has loaded.

 

不废话,直接查看该内存是什么:

0x0E664630  0e 00 0f 00 59 03 10 04 aa aa cd ab 00 10 72 85 38 00

看不出什么,往上再看看:

0x0E66460C  07 e2 04 00 a8 01 66 0e 01 00 cd cd fd fd fd fd....

 

看来这就是块堆内存,实在看不出什么,决定暂时忽略. 过了几天,该错误没有再出现过.

 

但就在交付程序前一天测试中,又出现了这个错误.看来一颗定时炸弹是埋藏在了程序中.必须找出来,否则后果很严重.

 

首先要做的就是要重现这个问题,如果每次碰巧遇到这个问题的话,实在无从下手.从症状来看,是个典型的Heap Corrup

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值