|
strace 可以用来跟踪程序执行时的系统调用及信号。
比如执行 strace echo "groad" ,你可以看到 strace 的输出 echo 指向时所用到的系统调用。但是,如果希望过滤出所有的 open() 系统调用,我们自然会想到使用下面命令:strace echo "groad" | gep "open" 然后执行的结果并非如我们所愿。
这是因为,strace 的是从标准错误(stderr) 输出结果的,而管道符的作用是,将左边标准输出(stdout)的内容输送到右边的标准输入(stdin) 。因此,如果我们希望向上面那样过滤出 open() 这个调用,那么可以如下做法:[beyes@beyes strace]$ strace echo "hello" 2>&1 |grep "open"
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib/libc.so.6", O_RDONLY) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3 由上可见,这样工作就正常了。上面,&1 表示的是标准输出(stdout) 。
类似的,可以将 strace 的输出结果重定向到文件中,比如:strace echo "groad" > myfile.txt 2>&1 可替换的一种写法是:strace echo "groad" &> myfile.txt 上面的这种写法将输出内容(包括 stdout 和 stdout)一股脑的重定向到 myfile.txt 中。 |
|