使用strace和ltrace跟踪程序调用
2013-11-23 21:00
162 查看
ltrace能够跟踪进程的库函数调用,它会显现出哪个库函数被调用,而strace则是跟踪程序的每个系统调用.
1.系统调用的输出对比
程序代码:
用#ltrace跟踪程序:
用#strace跟踪程序:
我们看到程序调用write()系统调用做了输出,同时strace还把程序运行时所做的系统调用都打印出来了.
其实#ltrace -S也可以把系统调用都打印出来:
注:我们看到它实际是用SYS_write系统调用来做打印输出,其实write()函数是SYS_write的封装,SYS_write是真正的系统调用.
2.ltrace/strace的耗时
# ltrace -c dd if=/dev/urandom of=/dev/null count=1000
使用-c选项,ltrace输出由进程创建的库调用,输出结果以调用过程的时间为准进行排序,因为是从urandom设备上读,这是一种产生随机数的设备,完成后,写入null设备.
所以读过程花费了较多的时间.
使用ltrace去捕获运行时函数,就好像在进程上系上了一个调试工具,它占据了ltrace大量的时间,这里ltrace一共消耗了3.28秒.
我们再来看一下strace所花费的时间:
# strace -c dd if=/dev/urandom of=/dev/null count=1000
strace一共消耗了0.008秒,strace把性能提升了很多倍,这主要是strace在跟踪系统调用的时候不需要动态库,而ltrace是根据动态库来分析程序运行的.
所以ltrace也只能跟踪动态库,不能跟踪静态库.
事实上我们用ltrace和strace都可以发现程序在哪个系统调用时发生了性能瓶径.
ltrace用-T,而strace也用-T.
3.ltrace与strace的相同点
ltrace与strace都可以指定PID,即对运行中的程序进行跟踪.
ltrace -p PID与strace -p PID
ltrace与strace都可以跟踪程序fork或clone子进程.
ltrace是用-f参数,而strace是用-f(fork/clone)和-F(vfork).
扩充阅读:
技巧: 使用truss、strace或ltrace诊断软件的"疑难杂症"
1.系统调用的输出对比
程序代码:
#include <stdio.h> main(){ char str[]= "Abcde"; printf("\n string = %s length = %d \n",str,str_length(str)); } int str_length (const char *s){ int length = 0; while (*s++){ length++; } return (length); }
用#ltrace跟踪程序:
用#strace跟踪程序:
我们看到程序调用write()系统调用做了输出,同时strace还把程序运行时所做的系统调用都打印出来了.
其实#ltrace -S也可以把系统调用都打印出来:
注:我们看到它实际是用SYS_write系统调用来做打印输出,其实write()函数是SYS_write的封装,SYS_write是真正的系统调用.
2.ltrace/strace的耗时
# ltrace -c dd if=/dev/urandom of=/dev/null count=1000
使用-c选项,ltrace输出由进程创建的库调用,输出结果以调用过程的时间为准进行排序,因为是从urandom设备上读,这是一种产生随机数的设备,完成后,写入null设备.
所以读过程花费了较多的时间.
使用ltrace去捕获运行时函数,就好像在进程上系上了一个调试工具,它占据了ltrace大量的时间,这里ltrace一共消耗了3.28秒.
我们再来看一下strace所花费的时间:
# strace -c dd if=/dev/urandom of=/dev/null count=1000
strace一共消耗了0.008秒,strace把性能提升了很多倍,这主要是strace在跟踪系统调用的时候不需要动态库,而ltrace是根据动态库来分析程序运行的.
所以ltrace也只能跟踪动态库,不能跟踪静态库.
事实上我们用ltrace和strace都可以发现程序在哪个系统调用时发生了性能瓶径.
ltrace用-T,而strace也用-T.
3.ltrace与strace的相同点
ltrace与strace都可以指定PID,即对运行中的程序进行跟踪.
ltrace -p PID与strace -p PID
ltrace与strace都可以跟踪程序fork或clone子进程.
ltrace是用-f参数,而strace是用-f(fork/clone)和-F(vfork).
扩充阅读:
技巧: 使用truss、strace或ltrace诊断软件的"疑难杂症"
相关文章推荐
- mysql中information_schema是什么?
- 数据库学习体会和总结
- IOS在线学习好網站收集
- 读书笔记:数据库索引的设计原则
- hdu 2222 Keywords Search (AC自动机)
- 数据库注入攻击
- poj 1389
- 宏中"#"和"##"的用法
- uva 10069
- /usr/local/arm/4.4.3/bin': not a valid identifier
- 使用for循环来遍历某个路径下的文件及文件夹
- 无约束优化方法读书笔记—入门篇
- 傻瓜式无线路由配置教程
- 傻瓜式无线路由配置教程
- Ubuntu启动问题以及Grub Rescue修复方法
- CentOS6.4系统安装后的基础优化
- MTM动画教程学习笔记1【第四章 渲染技术】
- Install GDAL in OpenSUSE 12.3 Linux
- 使用Eclipse创建Maven项目
- air学习笔记:快速添加图标