姜鹏辉的个人博客 GreyNius

【C】valgrind工具

2020-12-04

Valgrind

  • memcheck ——> 这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等
  • callgrind ——> 它主要用来检查程序中函数调用过程中出现的问题-
  • cachegrind ——> 它主要用来检查程序中缓存使用出现的问题-
  • helgrind ——> 它主要用来检查多线程程序中出现的竞争问题-
  • massif ——> 它主要用来检查程序中堆栈使用中出现的问题-
  • extension ——> 可以利用core提供的功能,自己编写特定的内存调试工具

memcheck 工具

参考:https://www.cnblogs.com/AndyStudy/p/6409287.html

运行

执行格式

valgrind --tool=memcheck --leak-check=full ./test

参数

  • -leak-check=no|summary|full 要求对leak给出详细信息? [summary]
  • -leak-resolution=low|med|high how much bt merging in leak check [low]
  • -show-reachable=no|yes show reachable blocks in leak check? [no]

错误

内存读写越界

Invalid read of size

使用未初始化的内存

Conditional jump or move depends on uninitialised value(s)

重复释放内存

Invalid free() / delete / delete[]

内存泄漏

Memcheck将内存泄露分为两种,一种是可能的内存泄露(Possibly lost),另外一种是确定的内存泄露(Definitely lost)

  • Possibly lost 是指仍然存在某个指针能够访问某块内存,但该指针指向的已经不是该内存首地址。
  • Definitely lost 是指已经不能够访问这块内存。
    • Definitely lost又分为两种:直接的(direct)和间接的(indirect)
    • 直接是没有任何指针指向该内存
    • 间接是指指向该内存的指针都位于内存泄露处

Similar Posts

Comments