strace – Trace System Calls and Signals

The strace command is a powerful utility in Linux that allows you to trace system calls and signals made by a process and its children. It is commonly used by system administrators and developers to debug and troubleshoot issues in their applications.

Overview

The strace command is used by invoking it followed by the name of the command or process that you want to trace. For example, to trace the ls command, you would enter:

strace ls

This will output a list of system calls made by the ls command, along with any signals received. The output can be quite verbose, so it is often useful to redirect it to a file for further analysis:

strace ls > ls_trace.txt

In addition to tracing system calls and signals, strace can also be used to monitor file and network activity. For example, to trace all file activity made by the ls command, you would use the -e trace=file option:

strace -e trace=file ls

This will output a list of all file-related system calls made by the ls command.

Options

The following table lists the available options for the strace command:

Option Description
-c Print a summary of system calls and signals.
-e trace=[set] Specify a set of system calls or signals to trace.
-f Trace child processes as well.
-o [file] Redirect output to a file.
-p [pid] Trace a running process by its process ID.
-s [num] Limit the maximum string size to [num] bytes.
-t Print a timestamp for each trace output.
-x Print non-ASCII characters in hexadecimal format.

Troubleshooting tips

If you encounter issues with the strace command, here are some troubleshooting tips:

  • If you receive a “permission denied” error when trying to trace a process, make sure you have sufficient permissions to access the process.
  • If the output is too verbose, consider using the -e trace=[set] option to limit the system calls and signals being traced.
  • If the output is too long, consider redirecting it to a file for further analysis.
  • If you are tracing a network-related process, make sure you are running strace as root to capture all traffic.

Notes

  • The strace command can be used to debug a wide range of issues, including file access errors, network connectivity issues, and performance problems.
  • Keep in mind that tracing system calls and signals can impact the performance of the traced process, so use strace judiciously.