Linux/Unix’te bir sürecin (process) yaptığı sistem çağrılarını(syscall) izlemek için kullanabileceğiniz bir araçtır. Ayrıca ptrace, ltrace komutlarını inceleyebilirsiniz.
Sürecin çıktılarını stdout’a, kendi çıktılarını stderr’e yazar. more ile sayfa sayfa görmek istiyorsanız. en basit (primitive) kullanımı aşağıdaki gibidir.
1 |
# strace <süreç> 2>&1 | more |
Strace Parametreleri:
- -e parametresi ile sadece bir fonksiyon için çıktı üretebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@omeroner ~]# strace -e "open" cd /tmp open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libtinfo.so.5", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 open("/dev/tty", O_RDWR|O_NONBLOCK) = 3 open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3 open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3 open("/usr/bin/cd", O_RDONLY) = 3 +++ exited with 0 +++ [root@omeroner ~]# |
- -o parametresi ile aşina olduğumuz üzere çıktıları bir dosyaya yönlendirebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@omeroner ~]# strace -e "open" -o /tmp/strace cd /tmp [root@omeroner ~]# more /tmp/strace open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libtinfo.so.5", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 open("/dev/tty", O_RDWR|O_NONBLOCK) = 3 open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3 open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3 open("/usr/bin/cd", O_RDONLY) = 3 +++ exited with 0 +++ [root@omeroner ~]# |
- -t parametresi ile zamansal olarak sistem fonksiyonlarının çalışma dilimlerini gösterir.
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@omeroner ~]# strace -t -e "open" cd /tmp 03:31:06 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 03:31:06 open("/lib64/libtinfo.so.5", O_RDONLY|O_CLOEXEC) = 3 03:31:06 open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3 03:31:06 open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 03:31:06 open("/dev/tty", O_RDWR|O_NONBLOCK) = 3 03:31:06 open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 03:31:06 open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3 03:31:06 open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3 03:31:06 open("/usr/bin/cd", O_RDONLY) = 3 03:31:06 +++ exited with 0 +++ [root@omeroner ~]# |
- -c ise raporsal bir çağrı çıktısı üretir.
1 2 3 4 5 6 7 |
[root@omeroner ~]# strace -c -t -e "open" cd /tmp % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 100.00 0.000048 5 9 open ------ ----------- ----------- --------- --------- ---------------- 100.00 0.000048 9 total |
- -p herhangi bir çalışan uygulamayı
<PID>
değerini vermek suretiyle trace edebiliriz.
1 |
# strace -f -c -p $(pidof mysqld) |
So, what do you think ?