体系结构:原理介绍·参考好文:应用 Valgrind 发现 Linux 程序的内存问题
简单组一个摘要:
Valgrind包括如下一些工具:
- Memcheck。这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。这也是本文将重点介绍的部分。
- Callgrind。它主要用来检查程序中函数调用过程中出现的问题。
- Cachegrind。它主要用来检查程序中缓存使用出现的问题。
- Helgrind。它主要用来检查多线程程序中出现的竞争问题。
- Massif。它主要用来检查程序中堆栈使用中出现的问题。
- Extension。可以利用core提供的功能,自己编写特定的内存调试工具。
一下是自己常用的配置选项:
注意不能使用-O2进行优化
alias gcc='gcc -g -Wall -pg -ggdb -pedantic -Wextra'
alias clang='clang-3.8 -Wall -g -pg -ggdb -pedantic -Wextra'
alias g++='g++ -g -Wall -pg -fno-inline -ggdb -pedantic -Wextra' alias clang++='clang++-3.8 -g -Wall -std=c++11 -pg -fno-inline'
此工具要比gprof 好用,
alias valgrind2='valgrind --trace-children=yes --child-silent-after-fork=yes --time-stamp=yes --tool=callgrind'
alias callgrind_annotate='callgrind_annotate --auto=yes --tree=both --inclusive=yes'
valgrind2 ./exe.out
callgrind_annotate callgrind.out.pid > exe.log
阅读源码,查看调用关系:
G ?source 开始一步步往下看
alias valgrind='valgrind --trace-children=yes --child-silent-after-fork=yes --xml=yes --xml-file=log.core --tool=memcheck --leak-check=full'
valgrind ./exe
使用excel 查看该文件, kind列以及后面的5列, 查看。
比较实用gprof工具的情况:
-pg