strace(1) - trace system calls and signals
strace  [  -CdffhiqrtttTvxx  ]  [  -acolumn  ]  [ -eexpr ] ...  [ -ofile ] [ -ppid ] ...  [ -sstrsize ] [
-uusername ] [ -Evar=val ] ...  [ -Evar ] ...  [ command [ arg ...  ] ]
-c          Count time, calls, and errors for each system call and report  a  summary  on  program
            exit.   On  Linux,  this  attempts  to show system time (CPU time spent running in the
            kernel) independent of wall clock time.  If -c is used with -f  or  -F  (below),  only
            aggregate totals for all traced processes are kept.
-C          Like -c but also print regular output while processes are running.
-d          Show some debugging output of strace itself on the standard error.
-f          Trace child processes as they are created by currently traced processes as a result of
            the fork(2) system call.

            On non-Linux platforms the new process is attached to as soon  as  its  pid  is  known
            (through  the  return  value  of  fork(2) in the parent process). This means that such
            children may run uncontrolled for a while (especially in  the  case  of  a  vfork(2)),
            until  the  parent  is  scheduled again to complete its (v)fork(2) call.  On Linux the
            child is traced from its first instruction with  no  delay.   If  the  parent  process
            decides  to  wait(2) for a child that is currently being traced, it is suspended until
            an appropriate child process either terminates or incurs a signal that would cause  it
            to terminate (as determined from the child's current signal disposition).

            On SunOS 4.x the tracing of vforks is accomplished with some dynamic linking trickery.
-ff         If  the  -o  filename  option  is  in  effect,  each  processes  trace  is  written to
            filename.pid  where  pid  is  the  numeric  process  id  of  each  process.   This  is
            incompatible with -c, since no per-process counts are kept.
-F          This option is now obsolete and it has the same functionality as -f.
-h          Print the help summary.
-i          Print the instruction pointer at the time of the system call.
-q          Suppress  messages  about  attaching,  detaching etc.  This happens automatically when
            output is redirected to a file and the command is run directly instead of attaching.
-r          Print a relative timestamp upon entry to each system  call.   This  records  the  time
            difference between the beginning of successive system calls.
-t          Prefix each line of the trace with the time of day.
-tt         If given twice, the time printed will include the microseconds.
-ttt        If  given  thrice,  the  time  printed  will  include the microseconds and the leading
            portion will be printed as the number of seconds since the epoch.
-T          Show the time spent in system calls. This records  the  time  difference  between  the
            beginning and the end of each system call.
-v          Print  unabbreviated  versions  of  environment,  stat,  termios,  etc.  calls.  These
            structures are very common in calls and so the default behavior displays a  reasonable
            subset of structure members.  Use this option to get all of the gory details.
-V          Print the version number of strace.
-x          Print all non-ASCII strings in hexadecimal string format.
-xx         Print all strings in hexadecimal string format.
-a column   Align return values in a specific column (default column 40).
-e expr     A  qualifying  expression  which  modifies which events to trace or how to trace them.
            The format of the expression is:

                      [qualifier=][!]value1[,value2]...

            where qualifier is one of trace, abbrev, verbose, raw,  signal,  read,  or  write  and
            value  is  a  qualifier-dependent  symbol  or number.  The default qualifier is trace.
            Using an exclamation mark negates the set  of  values.   For  example,  -e open  means
            literally  -e trace=open  which  in  turn  means  trace only the open system call.  By
            contrast, -e trace=!open means to trace every system call except open.   In  addition,
            the special values all and none have the obvious meanings.

            Note  that  some  shells  use  the exclamation point for history expansion even inside
            quoted arguments.  If so, you must escape the exclamation point with a backslash.
-e trace=set
            Trace only the specified set of system calls.  The -c option is useful for determining
            which system calls might be useful to trace.  For example, trace=open,close,read,write
            means to only trace those four system calls.  Be careful when making inferences  about
            the  user/kernel  boundary  if only a subset of system calls are being monitored.  The
            default is trace=all.
-e trace=file
            Trace all system calls which take a file name as an argument.  You can think  of  this
            as  an abbreviation for -e trace=open,stat,chmod,unlink,...  which is useful to seeing
            what files the process is  referencing.   Furthermore,  using  the  abbreviation  will
            ensure  that  you  don't accidentally forget to include a call like lstat in the list.
            Betchya woulda forgot that one.
-e trace=process
            Trace all system calls which involve process management.  This is useful for  watching
            the fork, wait, and exec steps of a process.
-e trace=network
            Trace all the network related system calls.
-e trace=signal
            Trace all signal related system calls.
-e trace=ipc
            Trace all IPC related system calls.
-e trace=desc
            Trace all file descriptor related system calls.
-e abbrev=set
            Abbreviate  the  output from printing each member of large structures.  The default is
            abbrev=all.  The -v option has the effect of abbrev=none.
-e verbose=set
            Dereference structures for  the  specified  set  of  system  calls.   The  default  is
            verbose=all.
-e raw=set  Print raw, undecoded arguments for the specified set of system calls.  This option has
            the effect of causing all arguments to be printed  in  hexadecimal.   This  is  mostly
            useful if you don't trust the decoding or you need to know the actual numeric value of
            an argument.
-e signal=set
            Trace only the specified subset of signals.  The default is signal=all.  For  example,
            signal =! SIGIO (or signal=!io) causes SIGIO signals not to be traced.
-e read=set Perform  a  full hexadecimal and ASCII dump of all the data read from file descriptors
            listed in the specified  set.   For  example,  to  see  all  input  activity  on  file
            descriptors  3  and  5 use -e read=3,5.  Note that this is independent from the normal
            tracing of the read(2) system call which is controlled by the option -e trace=read.
-e write=set
            Perform a full hexadecimal and ASCII dump of all the data written to file  descriptors
            listed  in  the  specified  set.   For  example,  to  see  all output activity on file
            descriptors 3 and 5 use -e write=3,5.  Note that this is independent from  the  normal
            tracing of the write(2) system call which is controlled by the option -e trace=write.
-o filename Write  the  trace output to the file filename rather than to stderr.  Use filename.pid
            if -ff is used.  If the argument begins with `|' or with `!'  then  the  rest  of  the
            argument  is  treated  as a command and all output is piped to it.  This is convenient
            for piping the debugging output to a program without  affecting  the  redirections  of
            executed programs.
-O overhead Set  the  overhead  for tracing system calls to overhead microseconds.  This is useful
            for overriding the default heuristic for guessing how  much  time  is  spent  in  mere
            measuring when timing system calls using the -c option.  The accuracy of the heuristic
            can be gauged by timing a given  program  run  without  tracing  (using  time(1))  and
            comparing the accumulated system call time to the total produced using -c.
-p pid      Attach  to  the  process  with the process ID pid and begin tracing.  The trace may be
            terminated at any time by a keyboard interrupt signal (CTRL-C).  strace  will  respond
            by detaching itself from the traced process(es) leaving it (them) to continue running.
            Multiple -p options can be used to attach to up to 32 processes in addition to command
            (which is optional if at least one -p option is given).
-s strsize  Specify the maximum string size to print (the default is 32).  Note that filenames are
            not considered strings and are always printed in full.
-S sortby   Sort the output of the histogram printed by the -c option by the specified  criterion.
            Legal values are time, calls, name, and nothing (default is time).
-u username Run  command  with  the user ID, group ID, and supplementary groups of username.  This
            option is only useful when running as root and enables the correct execution of setuid
            and/or  setgid  binaries.   Unless  this option is used setuid and setgid programs are
            executed without effective privileges.
-E var=val  Run command with var=val in its list of environment variables.
-E var      Remove var from the inherited list of environment variables before passing  it  on  to
            the command.