strace常用选项instance

strace使用帮助

[root@ecs-3370 ~]# strace -h
usage: strace [-CdffhiqrtttTvVwxxy] [-I n] [-e expr]...
              [-a column] [-o file] [-s strsize] [-P path]...
              -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]
   or: strace -c[dfw] [-I n] [-e expr]... [-O overhead] [-S sortby]
              -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]

Output format:
  -a column      alignment COLUMN for printing syscall results (default 40)
  -i             print instruction pointer at time of syscall
  -k             obtain stack trace between each syscall
  -o file        send trace output to FILE instead of stderr
  -q             suppress messages about attaching, detaching, etc.
  -r             print relative timestamp
  -s strsize     limit length of print strings to STRSIZE chars (default 32)
  -t             print absolute timestamp
  -tt            print absolute timestamp with usecs
  -T             print time spent in each syscall
  -x             print non-ascii strings in hex
  -xx            print all strings in hex
  -X format      set the format for printing of named constants and flags
  -y             print paths associated with file descriptor arguments
  -yy            print protocol specific information associated with socket file descriptors

Statistics:
  -c             count time, calls, and errors for each syscall and report summary
  -C             like -c but also print regular output
  -O overhead    set overhead for tracing syscalls to OVERHEAD usecs
  -S sortby      sort syscall counts by: time, calls, name, nothing (default time)
  -w             summarise syscall latency (default is system time)

Filtering:
  -e expr        a qualifying expression: option=[!]all or option=[!]val1[,val2]...
     options:    trace, abbrev, verbose, raw, signal, read, write, fault, inject, kvm
  -P path        trace accesses to path

Tracing:
  -b execve      detach on execve syscall
  -D             run tracer process as a detached grandchild, not as parent
  -f             follow forks
  -ff            follow forks with output into separate files
  -I interruptible
     1:          no signals are blocked
     2:          fatal signals are blocked while decoding syscall (default)
     3:          fatal signals are always blocked (default if '-o FILE PROG')
     4:          fatal signals and SIGTSTP (^Z) are always blocked
                 (useful to make 'strace -o FILE PROG' not stop on ^Z)

Startup:
  -E var         remove var from the environment for command
  -E var=val     put var=val in the environment for command
  -p pid         trace process with process id PID, may be repeated
  -u username    run command as username handling setuid and/or setgid

Miscellaneous:
  -d             enable debug output to stderr
  -v             verbose mode: print unabbreviated argv, stat, termios, etc. args
  -h             print help message
  -V             print version
SYNOPSIS
       strace [-ACdffhikqrtttTvVxxy] [-I n] [-b execve] [-e expr]... [-a column] [-o file] [-s strsize] [-X format] [-P path]... [-p pid]... { -p pid | [-D] [-E var[=val]]... [-u username] command [args] }

       strace -c [-df] [-I n] [-b execve] [-e expr]... [-O overhead] [-S sortby] [-P path]... [-p pid]... { -p pid | [-D] [-E var[=val]]... [-u username] command [args] }

常规打印

[root@ecs-3370 ~]# strace  ./helloworld
execve("./helloworld", ["./helloworld"], 0x7fffb28ec2f0 /* 23 vars */) = 0
brk(NULL)                               = 0x7d6000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f94b1119000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=76353, ...}) = 0
mmap(NULL, 76353, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f94b1106000
close(3)                                = 0
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`&\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2156592, ...}) = 0
mmap(NULL, 3985920, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f94b0b2b000
mprotect(0x7f94b0cef000, 2093056, PROT_NONE) = 0
mmap(0x7f94b0eee000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c3000) = 0x7f94b0eee000
mmap(0x7f94b0ef4000, 16896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f94b0ef4000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f94b1105000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f94b1103000
arch_prctl(ARCH_SET_FS, 0x7f94b1103740) = 0
access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory)
mprotect(0x7f94b0eee000, 16384, PROT_READ) = 0
mprotect(0x600000, 4096, PROT_READ)     = 0
mprotect(0x7f94b111a000, 4096, PROT_READ) = 0
munmap(0x7f94b1106000, 76353)           = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f94b1118000
write(1, "Hello, world\n", 13Hello, world
)          = 13
exit_group(13)               

打印统计信息

[root@ecs-3370 ~]# strace -c ./helloworld
Hello, world
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 27.35    0.000064           8         8           mmap
 15.38    0.000036           9         4           mprotect
 11.54    0.000027           9         3         3 access
  8.97    0.000021           7         3           fstat
  8.12    0.000019           9         2           open
  5.56    0.000013           6         2           close
  5.13    0.000012          12         1           execve
  4.70    0.000011          11         1           write
  4.27    0.000010          10         1           munmap
  2.99    0.000007           7         1           read
  2.99    0.000007           7         1           brk
  2.99    0.000007           7         1           arch_prctl
------ ----------- ----------- --------- --------- ----------------
100.00    0.000234                    28         3 total

同时打印常规信息和统计信息

[root@ecs-3370 ~]# strace -C ./helloworld
execve("./helloworld", ["./helloworld"], 0x7ffea9557f48 /* 23 vars */) = 0
brk(NULL)                               = 0x1b45000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f26d0c5b000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=76353, ...}) = 0
mmap(NULL, 76353, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f26d0c48000
close(3)                                = 0
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`&\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2156592, ...}) = 0
mmap(NULL, 3985920, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f26d066d000
mprotect(0x7f26d0831000, 2093056, PROT_NONE) = 0
mmap(0x7f26d0a30000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c3000) = 0x7f26d0a30000
mmap(0x7f26d0a36000, 16896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f26d0a36000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f26d0c47000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f26d0c45000
arch_prctl(ARCH_SET_FS, 0x7f26d0c45740) = 0
access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory)
mprotect(0x7f26d0a30000, 16384, PROT_READ) = 0
mprotect(0x600000, 4096, PROT_READ)     = 0
mprotect(0x7f26d0c5c000, 4096, PROT_READ) = 0
munmap(0x7f26d0c48000, 76353)           = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f26d0c5a000
write(1, "Hello, world\n", 13Hello, world
)          = 13
exit_group(13)                          = ?
+++ exited with 13 +++
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 46.43    0.000013           4         3           fstat
 32.14    0.000009           9         1           write
 21.43    0.000006           0         8           mmap
  0.00    0.000000           0         1           read
  0.00    0.000000           0         2           open
  0.00    0.000000           0         2           close
  0.00    0.000000           0         4           mprotect
  0.00    0.000000           0         1           munmap
  0.00    0.000000           0         1           brk
  0.00    0.000000           0         3         3 access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         1           arch_prctl
------ ----------- ----------- --------- --------- ----------------
100.00    0.000028                    28         3 total

过滤指定信息

[root@ecs-3370 ~]# strace ./helloworld 2>&1 | grep open
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3

或者通过以下方式

[root@ecs-3370 ~]# strace -e trace=open,close ./helloworld
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
close(3)                                = 0
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
close(3)                                = 0
Hello, world
+++ exited with 13 +++

输出到指定文件中

[root@ecs-3370 ~]# strace -o test.txt ./helloworld
Hello, world

显示时间

[root@ecs-3370 ~]# strace -t ./helloworld
09:04:39 execve("./helloworld", ["./helloworld"], 0x7ffedd683318 /* 23 vars */) = 0
09:04:39 brk(NULL)                      = 0x20f4000
09:04:39 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7feb1a9c5000
09:04:39 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
09:04:39 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
09:04:39 fstat(3, {st_mode=S_IFREG|0644, st_size=76353, ...}) = 0
09:04:39 mmap(NULL, 76353, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7feb1a9b2000
09:04:39 close(3)                       = 0
09:04:39 open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
09:04:39 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`&\2\0\0\0\0\0"..., 832) = 832
09:04:39 fstat(3, {st_mode=S_IFREG|0755, st_size=2156592, ...}) = 0
09:04:39 mmap(NULL, 3985920, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7feb1a3d7000
09:04:39 mprotect(0x7feb1a59b000, 2093056, PROT_NONE) = 0
09:04:39 mmap(0x7feb1a79a000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c3000) = 0x7feb1a79a000
09:04:39 mmap(0x7feb1a7a0000, 16896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7feb1a7a0000
09:04:39 close(3)                       = 0
09:04:39 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7feb1a9b1000
09:04:39 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7feb1a9af000
09:04:39 arch_prctl(ARCH_SET_FS, 0x7feb1a9af740) = 0
09:04:39 access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory)
09:04:39 access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory)
09:04:39 mprotect(0x7feb1a79a000, 16384, PROT_READ) = 0
09:04:39 mprotect(0x600000, 4096, PROT_READ) = 0
09:04:39 mprotect(0x7feb1a9c6000, 4096, PROT_READ) = 0
09:04:39 munmap(0x7feb1a9b2000, 76353)  = 0
09:04:39 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
09:04:39 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7feb1a9c4000
09:04:39 write(1, "Hello, world\n", 13Hello, world
) = 13
09:04:39 exit_group(13)                 = ?
09:04:39 +++ exited with 13 +++

显示更详细的时间

[root@ecs-3370 ~]# strace -tt ./helloworld
09:06:00.608448 execve("./helloworld", ["./helloworld"], 0x7ffe03473a78 /* 23 vars */) = 0
09:06:00.608797 brk(NULL)               = 0x792000
09:06:00.608890 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1439105000
09:06:00.608973 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
09:06:00.609107 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
09:06:00.609163 fstat(3, {st_mode=S_IFREG|0644, st_size=76353, ...}) = 0
09:06:00.609220 mmap(NULL, 76353, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f14390f2000
09:06:00.609259 close(3)                = 0
09:06:00.609301 open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
09:06:00.609361 read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`&\2\0\0\0\0\0"..., 832) = 832
09:06:00.609404 fstat(3, {st_mode=S_IFREG|0755, st_size=2156592, ...}) = 0
09:06:00.609441 mmap(NULL, 3985920, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f1438b17000
09:06:00.609480 mprotect(0x7f1438cdb000, 2093056, PROT_NONE) = 0
09:06:00.609519 mmap(0x7f1438eda000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c3000) = 0x7f1438eda000
09:06:00.609560 mmap(0x7f1438ee0000, 16896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f1438ee0000
09:06:00.609598 close(3)                = 0
09:06:00.609643 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f14390f1000
09:06:00.609681 mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f14390ef000
09:06:00.609729 arch_prctl(ARCH_SET_FS, 0x7f14390ef740) = 0
09:06:00.609818 access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory)
09:06:00.609864 access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory)
09:06:00.609900 mprotect(0x7f1438eda000, 16384, PROT_READ) = 0
09:06:00.609934 mprotect(0x600000, 4096, PROT_READ) = 0
09:06:00.609968 mprotect(0x7f1439106000, 4096, PROT_READ) = 0
09:06:00.610007 munmap(0x7f14390f2000, 76353) = 0
09:06:00.610080 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
09:06:00.610122 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1439104000
09:06:00.610160 write(1, "Hello, world\n", 13Hello, world
) = 13
09:06:00.610201 exit_group(13)          = ?
09:06:00.610260 +++ exited with 13 +++

显示每个系统调用所使用的时间

[root@ecs-3370 ~]# strace -T ./helloworld
execve("./helloworld", ["./helloworld"], 0x7ffea987d4e8 /* 23 vars */) = 0 <0.000191>
brk(NULL)                               = 0x1120000 <0.000022>
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f04270d1000 <0.000029>
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory) <0.000017>
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 <0.000013>
fstat(3, {st_mode=S_IFREG|0644, st_size=76353, ...}) = 0 <0.000015>
mmap(NULL, 76353, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f04270be000 <0.000012>
close(3)                                = 0 <0.000011>
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 <0.000012>
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`&\2\0\0\0\0\0"..., 832) = 832 <0.000016>
fstat(3, {st_mode=S_IFREG|0755, st_size=2156592, ...}) = 0 <0.000012>
mmap(NULL, 3985920, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f0426ae3000 <0.000010>
mprotect(0x7f0426ca7000, 2093056, PROT_NONE) = 0 <0.000015>
mmap(0x7f0426ea6000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c3000) = 0x7f0426ea6000 <0.000014>
mmap(0x7f0426eac000, 16896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f0426eac000 <0.000012>
close(3)                                = 0 <0.000015>
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f04270bd000 <0.000011>
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f04270bb000 <0.000010>
arch_prctl(ARCH_SET_FS, 0x7f04270bb740) = 0 <0.000012>
access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory) <0.000010>
access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory) <0.000010>
mprotect(0x7f0426ea6000, 16384, PROT_READ) = 0 <0.000014>
mprotect(0x600000, 4096, PROT_READ)     = 0 <0.000011>
mprotect(0x7f04270d2000, 4096, PROT_READ) = 0 <0.000012>
munmap(0x7f04270be000, 76353)           = 0 <0.000015>
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0 <0.000012>
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f04270d0000 <0.000010>
write(1, "Hello, world\n", 13Hello, world
)          = 13 <0.000014>
exit_group(13)                          = ?
+++ exited with 13 +++

显示文件路径

[root@ecs-3370 ~]# strace -y ./helloworld
execve("./helloworld", ["./helloworld"], 0x7ffcd3d50b78 /* 23 vars */) = 0
brk(NULL)                               = 0x11f7000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe7ae8f0000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3</etc/ld.so.cache>
fstat(3</etc/ld.so.cache>, {st_mode=S_IFREG|0644, st_size=76353, ...}) = 0
mmap(NULL, 76353, PROT_READ, MAP_PRIVATE, 3</etc/ld.so.cache>, 0) = 0x7fe7ae8dd000
close(3</etc/ld.so.cache>)              = 0
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3</usr/lib64/libc-2.17.so>
read(3</usr/lib64/libc-2.17.so>, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`&\2\0\0\0\0\0"..., 832) = 832
fstat(3</usr/lib64/libc-2.17.so>, {st_mode=S_IFREG|0755, st_size=2156592, ...}) = 0
mmap(NULL, 3985920, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3</usr/lib64/libc-2.17.so>, 0) = 0x7fe7ae302000
mprotect(0x7fe7ae4c6000, 2093056, PROT_NONE) = 0
mmap(0x7fe7ae6c5000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib64/libc-2.17.so>, 0x1c3000) = 0x7fe7ae6c5000
mmap(0x7fe7ae6cb000, 16896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fe7ae6cb000
close(3</usr/lib64/libc-2.17.so>)       = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe7ae8dc000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe7ae8da000
arch_prctl(ARCH_SET_FS, 0x7fe7ae8da740) = 0
access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory)
mprotect(0x7fe7ae6c5000, 16384, PROT_READ) = 0
mprotect(0x600000, 4096, PROT_READ)     = 0
mprotect(0x7fe7ae8f1000, 4096, PROT_READ) = 0
munmap(0x7fe7ae8dd000, 76353)           = 0
fstat(1</dev/pts/2>, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe7ae8ef000
write(1</dev/pts/2>, "Hello, world\n", 13Hello, world
) = 13
exit_group(13)                          = ?
+++ exited with 13 +++

注意观察以下两个系统调用多了尖括号的内容

fstat(1</dev/pts/2>, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0

write(1</dev/pts/2>, "Hello, world\n", 13Hello, world

) = 13

打印与套接字文件描述符相关的协议特定信息

print protocol specific information associated with socket file descriptors

[root@ecs-3370 ~]# strace -yy ./helloworld
execve("./helloworld", ["./helloworld"], 0x7ffff30c07f8 /* 23 vars */) = 0
brk(NULL)                               = 0x22fd000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4e65810000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3</etc/ld.so.cache>
fstat(3</etc/ld.so.cache>, {st_mode=S_IFREG|0644, st_size=76353, ...}) = 0
mmap(NULL, 76353, PROT_READ, MAP_PRIVATE, 3</etc/ld.so.cache>, 0) = 0x7f4e657fd000
close(3</etc/ld.so.cache>)              = 0
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3</usr/lib64/libc-2.17.so>
read(3</usr/lib64/libc-2.17.so>, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`&\2\0\0\0\0\0"..., 832) = 832
fstat(3</usr/lib64/libc-2.17.so>, {st_mode=S_IFREG|0755, st_size=2156592, ...}) = 0
mmap(NULL, 3985920, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3</usr/lib64/libc-2.17.so>, 0) = 0x7f4e65222000
mprotect(0x7f4e653e6000, 2093056, PROT_NONE) = 0
mmap(0x7f4e655e5000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib64/libc-2.17.so>, 0x1c3000) = 0x7f4e655e5000
mmap(0x7f4e655eb000, 16896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f4e655eb000
close(3</usr/lib64/libc-2.17.so>)       = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4e657fc000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4e657fa000
arch_prctl(ARCH_SET_FS, 0x7f4e657fa740) = 0
access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/sysconfig/strcasecmp-nonascii", F_OK) = -1 ENOENT (No such file or directory)
mprotect(0x7f4e655e5000, 16384, PROT_READ) = 0
mprotect(0x600000, 4096, PROT_READ)     = 0
mprotect(0x7f4e65811000, 4096, PROT_READ) = 0
munmap(0x7f4e657fd000, 76353)           = 0
fstat(1</dev/pts/2<char 136:2>>, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4e6580f000
write(1</dev/pts/2<char 136:2>>, "Hello, world\n", 13Hello, world
) = 13
exit_group(13)                          = ?
+++ exited with 13 +++

注意观察以下系统调用多出了更多尖括号的信息

fstat(1</dev/pts/2<char 136:2>>, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0

mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4e6580f000

write(1</dev/pts/2<char 136:2>>, "Hello, world\n", 13Hello, world

) = 13

ltrace VS strace

ltrace命令所执行的任务同strace类似,但它是针对库函数的调用。请通过man帮助获得更多细节。

[root@ecs-3370 ~]# ltrace ./helloworld
__libc_start_main(0x40052d, 1, 0x7ffe2fe55608, 0x400540 <unfinished ...>
puts("Hello, world"Hello, world
)                                                                                                                                = 13
+++ exited (status 13) +++
[root@ecs-3370 ~]# 
[root@ecs-3370 ~]# ltrace -c ./helloworld
Hello, world
% time     seconds  usecs/call     calls      function
------ ----------- ----------- --------- --------------------
 60.12    0.000392         392         1 __libc_start_main
 28.22    0.000184         184         1 puts
 11.66    0.000076          76         1 exit_group
------ ----------- ----------- --------- --------------------
100.00    0.000652                     3 total
[root@ecs-3370 ~]# 

注意

strace命令是Linux下专有的,但大多数UNIX实现都提供了它们各自的等价物(例如,Solaris 上的truss,以及BSD上的ktrace)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值