WEB开发网
开发学院操作系统Linux/Unix 动态跟踪工具 阅读

动态跟踪工具

 2009-09-06 00:00:00 来源:WEB开发网   
核心提示: 可以重定向输出并使用脚本解析输出,检查应用程序是否有未释放的已分配内存,动态跟踪工具(6),malloc.d 脚本捕捉应用程序执行的所有 malloc 调用,另外,那么可以按以下方式修改 malloc.d 脚本,如果在探测指定语句中没有指定模块部分,通过在前面的 D 脚本中的进入探测中添加 us

可以重定向输出并使用脚本解析输出,检查应用程序是否有未释放的已分配内存。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); 
} 

上一页  1 2 3 4 5 6 7  下一页

Tags:动态 跟踪 工具

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接