• Debugging with strace / truss / ltrace in Linux


    Reference: strace命令详解


    进程无法启动,软件运行速度变慢,程序的 "SegmentFault" 等等都是让每个 Unix 系统用户头痛的问题,本文通过演示如何使用 truss, strace, ltrace 这三个常用的调试工具来快速诊断软件的"疑难杂症"。


     

    truss / strace / ltrace 说明

    三个调试工具 truss, strace, ltrace 都是使用 ptrace 系统调用跟踪调试运行中的进程,基本使用方式很相似,但用途略有不同:

    • truss & strace: 跟踪一个进程的系统调用或信号产生的情况
    • ltrace: 跟踪进程调用库函数的情况

    命令的使用方式:

    1. <trace|strace|ltrace> <COMMAND>
    2. <trace|strace|ltrace> -p <PID>

    常用选项:

    1. -f, -F 同时跟踪fork和vfork出来的进程
    2. -o file 结果输出到某个文件
    3. -e execve 只记录 execve 这类系统调用
    4. -p PID 追踪指定 PID 对应的进程
    5. -D 输出前加时间戳


    案例

      
    Error message:  

    $ clint foo.cpp
      Segmentation fault (core dumped)
    

    Trace with truss

    truss -f clint foo.cpp
    

    Output:

       739: read(0x6,0x806f000,0x1000) = 4096 (0x1000)
       739: fstat(6,0xbfbfe4d0) = 0 (0x0)
       739: fcntl(0x6,0x3,0x0) = 4 (0x4)
       739: fcntl(0x6,0x4,0x0) = 0 (0x0)
       739: close(6) = 0 (0x0)
       739: stat("/home/foo/.clint/plugins",0xbfbfe680) ERR#2 'No such file or directory'
      SIGNAL 11
      SIGNAL 11
      Process stopped because of: 16
      process exit, rval = 139
    

    Solution:

    mkdir -p /home/foo/.clint/plugins
    

    WANDERING...

  • 相关阅读:
    linux之awk命令
    HDU 2097 Sky数 进制转换
    HDU 2077 汉诺塔IV
    HDU 2094 产生冠军 dfs加map容器
    HDU 2073 叠框
    HDU 2083 简易版之最短距离
    HDU 2063 过山车 二分匹配
    天梯 1014 装箱问题
    天梯 1214 线段覆盖
    天梯 1098 均分纸牌
  • 原文地址:https://www.cnblogs.com/tiantiandas/p/linux_debugging_tools.html
Copyright © 2020-2023  润新知