strace
Original author(s) | Paul Kranenburg |
---|---|
Developer(s) | Roland McGrath, Wichert Akkerman |
Stable release | 4.5.18 / August 29, 2008 |
Written in | C |
Operating system | Linux |
Type | Debugging |
License | BSD |
Website | http://sourceforge.net/projects/strace/ |
strace (presumably short for "system trace") is a debugging utility in Linux 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.
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
There are other similar, and sometimes more powerful, instrumentation tools on other platforms.
- Linux has ltrace, which can trace library and system calls
- Linux distributions after 2006 have SystemTap
- Solaris has Truss and DTrace
- FreeBSD provides the Truss command, ktrace and DTrace
- OpenBSD uses ktrace and kdump
- Mac OS X provides ktrace (10.4 and earlier) and DTrace (from Solaris) in 10.5 and later. http://docs.info.apple.com/article.html?artnum=305893]
- MS Windows has a similar tool called StraceNT created by Pankaj Garg. [1]
See also
External links
If you like SEOmastering Site, you can support it by - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 and more...