首页   /   c++   /   查内存泄漏+逻辑问题

内容

今天出了个大问题,事件队列插入了,但未进行遍历,自然也未释放。

开始怀疑是技能,buff等申请了未释放,但最后用机器人压测,排查到逻辑问题。

现象是:每秒100多K增长,很固定。


总结一下,查找过程

  1. 查一下new,delete配对的。

  2. 查一下erase,有没有迭代器value是指针的。

  3. 查一下clear,同上。

  4. 查一下,事件队列,插入与释放。

  5. 保存一下dmp,用vs看一下。

  6. 用工具查一下


工具查看如下:

  1. 任务管理器

         确定增长幅度与时间点。

    image.png

  2. 内存对比工具

      例如Debugging Tools for Windows(x64)

    1. 设置

      设置exe,绝对地址

          gflags -i *.exe +ust

      设PDB所在路径,绝对地址

           set  _NT_SYMBOL_PATH=d:\sf

    2. 使用,***是进程ID

      打印当前时间点到t1

           umdh -p:*** -f:d:\t1.txt

      打印当前时间点到t2

           umdh -p:*** -f:d:\t2.txt

      对比t1,t2到out

           umdh -d:*** d:\t1.txt d:\t2.txt > d:\out.txt

        c.例

            image.png

图中:

  1. 字节数,一般会比正常多一点(我每个new=100字节)

  2. 块个数

  3. 字节数,前后值,新3040,旧1520

  4. 块个数,前后值,新20,旧10

  5. 堆栈


参考:

https://blog.csdn.net/suhuaiqiang_janlay/article/details/47703391

https://blog.csdn.net/lluozh2015/article/details/73611079