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...

原文地址:https://www.cnblogs.com/tiantiandas/p/linux_debugging_tools.html