zoukankan      html  css  js  c++  java
  • 一种定位内存泄露的简易方法

    在这篇文章中,将介绍一种定位内存泄露的方法。主要原理是通过内存泄露时分配的序号以及大小,配合dbgheap.c文件来定位。

    具体介绍

    在VS开发过程中,打开CRT内部的内存泄露检测函数,当程序退出时,在调试窗口会输出未释放的内存信息,例如下图所示:

    利用dbgheap结合内存泄露信息定位内存泄露.jpg

    从上面截图可以得知,该次内存分配序号为1789698,内存指针为0x24C6D068,分配的大小为192800字节。

    查看VC的CRT内存分配库函数dbgheap.c中,实际分配的关键函数如下:

    dbgheap_alloc.jpg

    在该函数的入口处加设条件断点,使得nSize等于释放的内存大小即可,等待调试器在该处停止,然后往上回溯调用栈,发现真正泄露之处。

    还有根据内存分配序号来定位,也可以在上述文件中寻找对应条件断点检测入口。

    小结

    针对只有特定操作触发的内存泄露,可先不要使能该断点,待环境准备好之后,使能断点后立即操作。

    这种方法适用于泄露内存大小始终固定情况,是一种简易的笨方法。

  • 相关阅读:
    四十一.redis主从复制 RDB/AOF持久化 数据类型
    四十.创建Redis集群 管理集群
    三十九.NoSQL概述 部署Redis服务 、 部署LNMP+Redis
    三十八. 分库分表概述 配置mycat
    520D
    442C
    LA4788
    LA3276
    LA4122
    zoj3478
  • 原文地址:https://www.cnblogs.com/cherishui/p/12972444.html
Copyright © 2011-2022 走看看