织梦CMS - 轻松建站从此开始!

罗索

Linux调试Tip:内存泄露检查,CoreDump调试

落鹤生 发布于 2010-04-18 15:24 点击:次 
Linux调试笔记:内存泄露检查,CoreDump调试
TAG:

检查内存泄漏

解压缩

tar -jxvf valgrind-2.4.0.tar

创建安装目录

mkdr /tmp/valgrind

进入解压后目录 valgrind-2/

./configure --prefix=/tmp/valgrind

安装

gmake

gmake install

cd /tmp/valgrind

若使用Memcheck,命令如下:
valgrind --leak-check=yes myprog arg1 arg2
Memcheck是Valgrind的缺省工具。--leak-check选项将打开内存泄漏的详细检测器。
如果说你的内存泄漏错误代码,即myprog如下所示:
#include <stdlib.h>
void f(void)
{
int* x = malloc(10 * sizeof(int));
x[10] = 0; // problem 1: heap block overrun
} // problem 2: memory leak -- x not freed

int main(void)
{
f();
return 0;
}


运行过程中,问题1的错误指示消息将会显示出来,主要是内存越界
==19182== Invalid write of size 4
==19182== at 0x804838F: f (example.c:6)
==19182== by 0x80483AB: main (example.c:11)
==19182== Address 0x1BA45050 is 0 bytes after a block of size 40 alloc'd
==19182== at 0x1B8FF5CD: malloc (vg_replace_malloc.c:130)
==19182== by 0x8048385: f (example.c:5)
==19182== by 0x80483AB: main (example.c:11)
对于问题2,内存泄漏的消息如下所示:
==19182== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1
==19182== at 0x1B8FF5CD: malloc (vg_replace_malloc.c:130)
==19182== by 0x8048385: f (a.c:5)
==19182== by 0x80483AB: main (a.c:11)

检查core down

ulimit -c unlimited

现象:最近上线一个udp的接收代码,不知什么原因会不定期down,通常执行5,6天就会出现一次。

代码中使用了C++标准库,怀疑和标准库有关系。

1、screen -S rox_screen -T linux

2、ctrl+a+d 切换

3、ulimit -u unlimited

4、DEBUG模式下执行receiver

5、ls/core,file /core 查看是否是core文件

6、gdb receiver /core

7、backtrace

8、frame

(落鹤生)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201004/9161.html]
本文出处:网络博客 作者:落鹤生
顶一下
(0)
0%
踩一下
(1)
100%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容