Jump to content

Strace: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Line 100: Line 100:
==See also==
==See also==
{{Portal|Free software|Computer programming}}
{{Portal|Free software|Computer programming}}
{{Columns-list|3|
* [[ktrace]]
* [[ktrace]]
* [[ltrace]]
* [[ltrace]]
Line 105: Line 106:
* [[gdb]]
* [[gdb]]
* [[List of Unix programs]]
* [[List of Unix programs]]
}}


==References==
==References==

Revision as of 14:00, 12 August 2014

strace
Original author(s)Paul Kranenburg
Developer(s)Dmitry Levin
Stable release
4.8 / June 3, 2013; 11 years ago (2013-06-03)
Repository
Written inC
Operating systemLinux
TypeDebugging
LicenseBSD
Websitehttp://sourceforge.net/projects/strace/

strace is a debugging utility for Linux and some other Unix-like systems to monitor the system calls used by a program and all the signals it receives, similar to "truss" utility in other Unix systems. This is made possible by a kernel feature known as ptrace.

A similar utility is provided by Cygwin.

Usage

The most common usage is to start a program using strace, which prints a list of system calls made by the program. This is useful if the program continually crashes, or does not behave as expected; for example using strace may reveal that the program is attempting to access a file which does not exist or cannot be read.

An alternative application is to use the -p flag to attach to a running process. This is useful if a process has stopped responding, and might reveal, for example, that the process is blocking whilst attempting to make a network connection.

As strace only details system calls, it cannot be used to detect as many problems as a code debugger such as GNU Debugger (gdb). It is, however, easier to use than a code debugger, and is an extremely useful tool for system administrators. It is also used by researchers to generate system call traces for later system call replay.[1] [2] [3]

Example strace output

The following is an example of typical output of the strace command:

open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
fcntl64(3, F_GETFD)                     = 0x1 (flags FD_CLOEXEC)
getdents64(3, /* 18 entries */, 4096)   = 496
getdents64(3, /* 0 entries */, 4096)    = 0
close(3)                                = 0
fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f2c000
write(1, "autofs\nbackups\ncache\nflexlm\ngames"..., 86autofsA

The above fragment is only a small part of the output of strace when run on the 'ls' command. It shows that the current working directory is opened, inspected and its contents retrieved. The resulting list of file names is written to standard output.

Other tools

Different operating-systems feature other similar (and sometimes more powerful) instrumentation tools, for example:

See also

3

References

  1. ^ Horky, Jiri (2013). "The ioapps IO profiler and IO traces replayer". Retrieved 2013-09-16.
  2. ^ Waterland, Amos (2007). "The sreplay system call replayer". Retrieved 2013-09-16.
  3. ^ Burton, Ariel (1998). "Workload characterization using lightweight system call tracing and reexecution" (PDF). Retrieved 2013-09-16.
  4. ^ "dtrace(1) Mac OS X Manual Page". Developer.apple.com. Retrieved 2014-07-23.
  5. ^ "Products - StraceNT - Strace for Windows". IntellectualHeaven. Retrieved 2014-07-23.