DTrace memory leak 内存泄露

本文介绍了一个使用DTrace编写的程序,该程序可以跟踪进程中的内存分配行为,包括malloc、realloc和calloc等函数的调用情况,并记录下分配的指针地址及大小,通过Perl脚本进一步筛选出可疑的内存操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

http://blog.sina.com.cn/s/blog_538040b70100eecn.html
 

如下程序用于跟踪,在分配和回收都会触发探针

#!/usr/sbin/dtrace -s

pid$target:libc:malloc:entry
{
    self->trace = 1;
    self->size = arg0;
}
pid$target:libc:malloc:return
/self->trace == 1/
{
    printf("Ptr=0x%p Size=%d", arg1, self->size);
    ustack();
    self->trace = 0;
    self->size = 0;
}

pid$target:libc:realloc:entry
{
    self->trace = 1;
    self->size = arg1;
    self->oldptr = arg0;
}

pid$target:libc:realloc:return
/self->trace == 1/
{
    printf("Ptr=0x%p Oldptr=0x%p Size=%d", arg1, self->oldptr, self->size);
    ustack();
    self->trace = 0;
    self->size = 0;
}

pid$target:libc:calloc:entry
{
    self->trace = 1;
    self->size = arg1;
}

pid$target:libc:calloc:return
/self->trace == 1/
{
    printf("Ptr=0x%p Size=%d", arg1, self->size);
    ustack();
    self->trace = 0;
    self->size = 0;
}

pid$target:libc:free:entry
{
    printf("Ptr=0x%p ", arg0);
}

然后用perl程序将正常分配回收的去掉,剩下的就是有问题的调用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值