Valgrind:帮助程序员寻找程序里的bug和改进程序性能的工具集。擅长是发现内存的管理问题;里边有若干工具,其中最重要的是Memcheck(内存检查)工具,用于检查内存的泄漏;

memcheck的基本功能,能发现如下的问题;

  • a)使用未初始化的内存
  • b)使用已经释放了的内存
  • c)使用超过malloc()分配的内存
  • d)对堆栈的非法访问
  • e)申请的内存是否有释放
  • f)malloc/free,new/delete申请和释放内存的匹配
  • g)memcpy()内存拷贝函数中源指针和目标指针重叠;

内存泄漏检查示范

所有应该释放的内存,都要释放掉,作为服务器程序开发者,要绝对的严谨和认真

格式:
  • valgrind –tool=memcheck 一些开关 可执行文件名
  • –tool=memcheck :使用valgrind工具集中的memcheck工具
  • –leak-check=full : 指的是完全full检查内存泄漏
  • –show-reachable=yes :是显示内存泄漏的地点
  • –trace-children = yes :是否跟入子进程
  • –log-file=log.txt:讲调试信息输出到log.txt,不输出到屏幕
最终用的命令:
1
valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./test
查看内存泄漏的三个地方:

(1) 9 allocs, 8 frees 差值是1,就没泄漏,超过1就有泄漏
(2)中间诸如: by 0x401363: CConfig::Load(char const*) (ngx_c_conf.cxx:77)和我们自己的源代码有关的提示,就
(3)LEAK SUMMARY:definitely lost: 1,100 bytes in 2 blocks