ltrace能够跟踪进程的库函数调用,它会显现出哪个库函数被调用,而strace则是跟踪程序的每个系统调用.

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诊断软件的"疑难杂症"

使用strace和ltrace跟踪程序调用相关推荐

  1. 使用truss、strace或ltrace诊断软件的疑难杂症

    原文链接 简介 进程无法启动,软件运行速度突然变慢,程序的"Segment Fault"等等都是让每个Unix系统用户头痛的问题,本文通过三个实际案例演示如何使用truss.str ...

  2. Shell命令-管理与性能监视之strace、ltrace

    内容更新中 转载于:https://www.cnblogs.com/wjcLinux/p/11125826.html

  3. strace,ltrace linux下跟踪进程调用的命令

     本工具可以用来做大多数排除,比如mount一个NFS,很慢,找不出原因,我们可以使用strace命令来跟中mount这个经常所有的调用过程. strace 命令是一种强大的工具,它能够显示所有由 ...

  4. linux truss strace ltrace 对比 诊断调试程序

    strace.ltrace.truss作用 1.了解一个程序的工作原理(可以了解Linux下很多常用的命令实现的原理): 2.帮助定位程序中的问题(在开发工作时帮助定位问题): strace stra ...

  5. ltrace, strace

    ltrace能够跟踪进程的库函数调用,它会显现出哪个库函数被调用,而strace则是跟踪程序的每个系统调用. 下面是一个ltrace与strace的对比 1)系统调用的输出对比 我们用输出hello ...

  6. strace ltrace使用

    1.strace # strace ./test# ps aux | grep test 1045# strace -s 500 -p 1045 示例:打印执行ls时跟文件有关的系统调用.# stra ...

  7. linux的strace命令

    linux的strace命令 strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用. strace 显示这些调用的参数并返回符号形式的值.strace 从内核接收信息,而且不 ...

  8. strace使用详解(未研究)

    (一) strace 命令    用途:打印 STREAMS 跟踪消息. 语法:strace [ mid sid level ] ... 描述:没有参数的 strace 命令将所有的驱动程序和模块中的 ...

  9. linux的strace命令(详解)

    linux的strace命令(详解) 本文详细讲述linux下的strace命令的用法. strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用. strace 显示这些调用的 ...

最新文章

  1. mysql单列索引和多列索引_mysql索引类型 normal, unique, full text
  2. 企业架构 - 组织角色和技能
  3. excel两个表格数据对比_Excel表格怎么防止看错数据?阅读模式了解一下
  4. 站着办公有助减轻体重
  5. android uid systemui,(android)system ui 内存优化
  6. IOS15的抽屉效果
  7. python各版本区别_关于python中不同版本的print区别
  8. PWN-PRACTICE-BUUCTF-16
  9. java public 继承_java继承问题
  10. C# 串口操作系列(5)--通讯库雏形
  11. abaqus实例手册_ABAQUS_6.10例子问题手册(目录)
  12. 当前目录未找到系统,请尝试选择更深层的目录再次搜索解决方法
  13. Required field ‘client_protocol‘ is unset!
  14. mac mojava 安装php56的正确姿势
  15. Redhat使用yum install时提示This system is not registered with an entitlement server 的解决办法
  16. 长沙市取消职称英语和计算机,哪些城市已取消职称英语考试?
  17. 800个有趣句子帮你记忆7000个单词
  18. 【博文汇总】Java程序设计语言
  19. JavaSE 软件工程师 认证考试试卷3
  20. randomize方式总结

热门文章

  1. mysql www.school.com_MySQL 基础学习
  2. Numpy数组图像基本操作方法,及截取ROI、增加行与列
  3. C指针4:数组指针(指向数组的指针)
  4. Python 骚操作:微信远程控制电脑
  5. 1. CVPR2021-Papers-with-Code-Demo(CVPR2021论文下载)
  6. jvm 堆外内存_NIO效率高的原理之零拷贝与直接内存映射
  7. 基于成像激光雷达的鲁棒位置识别
  8. Qt中openGL的四个重要事件(initializeGL() resizeGL() paintGL() pdateGL())调用规则
  9. vue中轻松搞掂鼠标气泡框提示框tip跟随
  10. C#和Unity编码和游戏开发学习教程