GNU/Linux >> Belajar Linux >  >> Linux

Tutorial Perintah strace Linux untuk Pemula (8 Contoh)

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.


Linux
  1. Tutorial perintah cd Linux untuk pemula (8 Contoh)

  2. Tutorial perintah comm Linux untuk pemula (5 contoh)

  3. Tutorial Perintah Tanggal Linux untuk Pemula (8 Contoh)

  1. Tutorial Perintah Linux df untuk Pemula (8 Contoh)

  2. Tutorial Perintah Linux du untuk Pemula (10 Contoh)

  3. Tutorial Perintah gema Linux untuk Pemula (5 Contoh)

  1. Tutorial Perintah Linux env Untuk Pemula (5 Contoh)

  2. Tutorial Perintah ukuran Linux untuk Pemula (6 Contoh)

  3. Linux membunuh Tutorial Perintah untuk Pemula (5 Contoh)