动态跟踪工具
2009-09-06 00:00:00 来源:WEB开发网可以重定向输出并使用脚本解析输出,检查应用程序是否有未释放的已分配内存。malloc.d 脚本捕捉应用程序执行的所有 malloc 调用。另外,通过在前面的 D 脚本中的进入探测中添加 ustack() 函数,可以显示 malloc 调用的堆栈跟踪,这有助于识别造成泄露的代码位置。
这个示例使用 PID 提供者。PID 探测提供者的名称形式为字符串 ‘pid’ 加上进程 ID。因此,对于进程 1234,PID 提供者为 pid1234。
arg0 是传递给要探测的函数的参数,用于进入探测。
arg1 是要探测的函数的返回值,用于退出探测。
在 malloc.d 脚本中,在运行时把 $target 替换为应用程序 myapp 的进程 ID。
如果用户需要跟踪某个用户函数中的 malloc 和 free 调用,那么可以按以下方式修改 malloc.d 脚本。如果在探测指定语句中没有指定模块部分,探测就应用于与这个应用程序链接的所有模块。
pid$target::functionXX:entry
{
traceflag=1;
}
pid$target::functionXX:return
{
traceflag=0;
}
pid$target::malloc:entry
/traceflag != 0/
{
printf("malloc: PID %d requested %d bytes\n",$target,arg0);
}
pid$target::malloc:return
/traceflag != 0/
{
printf("malloc: PID %d returned address 0X%x\n",$target,arg1);
}
pid$target::free:entry
/traceflag != 0/
{
printf("free: PID %d freeing address 0X%x \n",$target,arg0);
}
更多精彩
赞助商链接