Baris perintah Linux menawarkan banyak alat yang berguna untuk pengembang perangkat lunak. Salah satunya adalah strace , dasar-dasar yang akan kita bahas dalam tutorial ini menggunakan beberapa contoh yang mudah dipahami.
Namun sebelum kita melakukannya, perlu disebutkan bahwa semua contoh dalam artikel ini telah diuji pada mesin Ubuntu 18.04 LTS dan Debian 10.
Perintah strace di Linux memungkinkan Anda melacak panggilan dan sinyal sistem. Berikut sintaksnya:
strace [OPTIONS] command
Dan inilah cara halaman manual alat menjelaskannya:
In the simplest case strace runs the specified command until it exits.
It intercepts and records the system calls which are called by a
process and the signals which are received by a process. The name of
each system call, its arguments and its return value are printed on
standard error or to the file specified with the -o option.
strace is a useful diagnostic, instructional, and debugging tool. Sys?
tem administrators, diagnosticians and trouble-shooters will find it
invaluable for solving problems with programs for which the source is
not readily available since they do not need to be recompiled in order
to trace them. Students, hackers and the overly-curious will find that
a great deal can be learned about a system and its system calls by
tracing even ordinary programs. And programmers will find that since
system calls and signals are events that happen at the user/kernel
interface, a close examination of this boundary is very useful for bug
isolation, sanity checking and attempting to capture race conditions.
Berikut adalah beberapa contoh gaya Tanya Jawab yang akan memberi Anda gambaran yang lebih baik tentang cara kerja perintah strace.
Menginstal perintah strace
Perintah strace tidak diinstal secara Default di sebagian besar sistem, untuk menginstalnya di Debian dan Ubuntu, jalankan perintah ini:
sudo apt-get install strace
Q1. Bagaimana cara menggunakan perintah strace?
Penggunaan dasarnya sederhana, cukup jalankan 'strace' dengan perintah sebagai input. Misalnya, saya menggunakannya dengan perintah ls:
strace ls
Dan inilah output yang dihasilkan pada sistem saya:
Q2. Bagaimana memahami keluaran strace?
Seperti yang Anda lihat pada tangkapan layar di bagian sebelumnya, perintah strace menghasilkan banyak keluaran. Jadi, Anda perlu mengetahui cara memahaminya.
Kutipan berikut dari halaman manual memberikan penjelasan langsung:
Each line in the trace contains the system call name, followed by its
arguments in parentheses and its return value. An example from strac?
ing the command "cat /dev/null" is:
open("/dev/null", O_RDONLY) = 3
Errors (typically a return value of -1) have the errno symbol and error
string appended.
open("/foo/bar", O_RDONLY) = -1 ENOENT (No such file or directory)
Signals are printed as signal symbol and decoded siginfo structure. An
excerpt from stracing and interrupting the command "sleep 666" is:
sigsuspend([] <unfinished ...>
--- SIGINT {si_signo=SIGINT, si_code=SI_USER, si_pid=...} ---
+++ killed by SIGINT +++
Q3. Bagaimana cara membuat pointer instruksi cetak strace?
Ada opsi -i yang memberi tahu strace untuk mencetak pointer instruksi pada saat panggilan sistem.
Misalnya:
strace -i ls
Berikut outputnya:
Jadi Anda dapat melihat bahwa penunjuk instruksi dicetak di setiap baris dalam output.
Q4. Bagaimana cara membuat stempel waktu cetak strace untuk setiap panggilan sistem?
Terdapat opsi baris perintah -r yang memberi tahu strace untuk menampilkan stempel waktu relatif saat masuk ke setiap panggilan sistem. Halaman manual alat mengatakan ini mencatat perbedaan waktu antara awal panggilan sistem yang berurutan.
Misalnya:
strace -r ls
Berikut adalah output yang dihasilkan oleh perintah ini:
Jadi Anda dapat melihat bahwa stempel waktu relatif dibuat di awal setiap baris.
Q5. Bagaimana cara mengawali setiap jalur keluaran dengan waktu jam?
Jika Anda ingin setiap baris dalam keluaran strace dimulai dengan waktu jam, maka ini dapat dilakukan dengan menggunakan opsi baris perintah -t.
Misalnya:
strace -t ls
Inilah output dari perintah ini di sistem saya:
Jadi Anda dapat melihat bahwa waktu sistem dicetak di awal setiap baris.
Perhatikan bahwa ada dua opsi terkait lainnya yang ditawarkan strace:
-tt
If given twice, the time printed will include the microseconds.
-ttt
If given thrice, the time printed will include the microseconds and the leading portion will
be printed as the number of seconds since the epoch.
Q6. Bagaimana cara membuat strace menunjukkan waktu yang dihabiskan dalam panggilan sistem?
Ini dapat dicapai dengan menggunakan opsi baris perintah -T.
Misalnya:
strace -T ls
Berikut adalah outputnya:
Agar Anda dapat melihat waktu yang dihabiskan dalam panggilan sistem dicetak di akhir setiap baris.
Q7. Bagaimana cara membuat strace mencetak ringkasan alih-alih keluaran biasa?
Output baris perintah -c dapat digunakan jika Anda ingin alat ini menghasilkan ringkasan.
Misalnya, perintah berikut:
strace -c ls
menghasilkan output ini di sistem saya:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
93.66 0.000133 5 28 write
6.34 0.000009 1 11 close
0.00 0.000000 0 7 read
0.00 0.000000 0 10 fstat
0.00 0.000000 0 17 mmap
0.00 0.000000 0 12 mprotect
0.00 0.000000 0 1 munmap
0.00 0.000000 0 3 brk
0.00 0.000000 0 2 rt_sigaction
0.00 0.000000 0 1 rt_sigprocmask
0.00 0.000000 0 2 ioctl
0.00 0.000000 0 8 8 access
0.00 0.000000 0 1 execve
0.00 0.000000 0 2 getdents
0.00 0.000000 0 2 2 statfs
0.00 0.000000 0 1 arch_prctl
0.00 0.000000 0 1 set_tid_address
0.00 0.000000 0 9 openat
0.00 0.000000 0 1 set_robust_list
0.00 0.000000 0 1 prlimit64
------ ----------- ----------- --------- --------- ----------------
100.00 0.000142 120 10 total
Jadi Anda dapat melihat ringkasan yang memberi Anda gambaran tentang berapa banyak panggilan yang dilakukan per panggilan sistem serta informasi terkait waktu untuk setiap panggilan sistem.
Kesimpulan
Kami baru saja menggores permukaan di sini karena perintah strace juga menawarkan banyak fitur lainnya. Setelah Anda selesai mempraktikkan semua yang telah kita diskusikan di sini, buka halaman manual strace untuk mempelajari lebih lanjut tentang alat tersebut.