valgind的使用
2015-12-24 11:26
288 查看
介绍:
valgrind是一个在linux下极其有用的工具。他通过伪造malloc()监控分配在堆上的数据。当(目标)程序想要分配堆存储器时,valgrind将会拦截(目标程序)的malloc()和free()的调用,然后运行自己的malloc()和free()。valgrind的malloc()会记录调用它的是哪段代码和分配了哪段存储器。程序结束时,valgrind会汇报堆上有哪些数据,并告诉你这些数据是由哪段代码创建的。
下面来使用valgrind
1)下载valgrind的源代码
http://www.valgrind.org/downloads/current.html
2)解压,并编译这些代码(因为我是OSX,所以多了一条选择Xcode来编译的语句),可能会因为权限问题,所以先切换到root
sudo -i
tar -jxvf valgrind-3.9.0.tar.bz2
cd valgrind-3.9.0
./configure
sudo xcode-select-switch /Applications/Xcode.app/Contents/Developer
make
make install
make install成功之后,查看一下当前valgrind的版本、查看一下帮助:
3)写一个malloc,但是没有free的例子
4)编译上面的程序
使用如下命令,启动程序:
valgrind --leak-check=full./memory_leaks_test
上图所说,有一个内存出现泄漏definitely lost表示,泄漏了10bytes的内存
5)加上对应的free之后,再次使用
valgrind--leak-check=full ./memory_leaks_test
启动程序,可以看到已经没有errors了
FROM: http://blog.csdn.net/zengraoli/article/details/19540705
valgrind是一个在linux下极其有用的工具。他通过伪造malloc()监控分配在堆上的数据。当(目标)程序想要分配堆存储器时,valgrind将会拦截(目标程序)的malloc()和free()的调用,然后运行自己的malloc()和free()。valgrind的malloc()会记录调用它的是哪段代码和分配了哪段存储器。程序结束时,valgrind会汇报堆上有哪些数据,并告诉你这些数据是由哪段代码创建的。
下面来使用valgrind
1)下载valgrind的源代码
http://www.valgrind.org/downloads/current.html
2)解压,并编译这些代码(因为我是OSX,所以多了一条选择Xcode来编译的语句),可能会因为权限问题,所以先切换到root
sudo -i
tar -jxvf valgrind-3.9.0.tar.bz2
cd valgrind-3.9.0
./configure
sudo xcode-select-switch /Applications/Xcode.app/Contents/Developer
make
make install
make install成功之后,查看一下当前valgrind的版本、查看一下帮助:
3)写一个malloc,但是没有free的例子
4)编译上面的程序
使用如下命令,启动程序:
valgrind --leak-check=full./memory_leaks_test
上图所说,有一个内存出现泄漏definitely lost表示,泄漏了10bytes的内存
5)加上对应的free之后,再次使用
valgrind--leak-check=full ./memory_leaks_test
启动程序,可以看到已经没有errors了
FROM: http://blog.csdn.net/zengraoli/article/details/19540705
相关文章推荐
- JavaScript 前端编程使用小技巧
- 计算机视觉牛人博客和代码汇总(全)
- virtualbox虚拟机设置静态IP的桥接模式配置
- AngularJs数据渲染到视图后再执行操作
- spring boot jsp
- 多谐振荡发生器_20151224
- Android SDK Manager 更新代理配置和代理清单
- 导入mongo数据库
- 70、MSTP简介
- UITableViewController和UIRefreshControl实现下拉刷新功能
- js对表单设置了readonly和disabled后的区别
- 面向对象编程思想(OOP)
- linux运维实战练习案例-2015年12月20日-12月31日(第一次)
- 数据的update/insert, 可以用BATCH UPDATE方法
- effective c++学习笔记
- httplib下载http链接的DOC文档
- ViewController生命周期
- 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。
- vi 编辑器
- 取消win7禁用的ping