一个崭新的内存泄漏检测方法

这几天,我有位同事碰到一个棘手的问题。

问题是:我们的Server程序连接了两台Client,运行了一段时间以后,内存会膨胀。

看他一筹莫展,我于是向他了解情况,建议他先采用BoundsChecker来检测内存泄漏。

可是,无所收获。

于是,我再建议他采用CRT内存泄漏检测方法,他照做了,可是后来发现一个问题。

其实,CRT退出时,根本检测不到内存泄漏。

原因是,程序退出时,膨胀的内存可能也被释放掉。譬如,它如果存在列表中的话,

运行时,该列表膨胀,但程序退出时,该列表也会被清掉,

这可怎么办?

后来,我想,能不能知道哪个线程内存正在膨胀。

其实,我本来就编写了一个工具,可以查看各线程的使用情况。

这时,我眼前突然一亮,如果把某个线程暂停了内存不再膨胀,不就知道内存膨胀的线程了。

于是,我在我的工具上加上了暂停线程、恢复线程的功能。

最后,我同事利用该工具找到了内存膨胀的线程。

然后,通过在该线程中设断点,找到了导致内存膨胀的代码,解决了问题。

 

虽然这个方法有点局限,但他可以知道确切哪个线程内存已经膨胀。

从而,配合一些跟踪技巧还是可以找到内存膨胀的原因。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值