zoukankan      html  css  js  c++  java
  • 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...

  • 相关阅读:
    VB.NET中lambda的写法
    C#中DllImport用法和路径问题
    SQL*Loader 和 Data Pump
    批处理-函数定义及应用01
    Office 2010 KMS激活原理和案例分享
    Hyper-V架构与VMware ESXi的差异
    Tomcat免安装配置2
    Tomcat免安装配置
    域名解析过程
    内部类访问的局部变量必须加final
  • 原文地址:https://www.cnblogs.com/tiantiandas/p/linux_debugging_tools.html
Copyright © 2011-2022 走看看