Program Linux Tanyakan
inti
untuk melakukan beberapa hal untuk mereka. NS
Strace.
Perintah mengungkapkan panggilan sistem ini. Anda dapat menggunakannya untuk memahami bagaimana program bekerja dan mengapa, kadang-kadang, mereka tidak.
Panggilan kernel dan sistem
Sekerdas mungkin, program komputer tidak dapat melakukan segalanya untuk diri mereka sendiri. Mereka perlu membuat permintaan untuk memiliki fungsi tertentu yang dilakukan untuk mereka. Permintaan ini pergi ke kernel Linux. Biasanya, ada perpustakaan atau antarmuka perangkat lunak lain yang dipanggil program, dan perpustakaan kemudian membuat permintaan yang sesuai - disebut sistem panggilan ke kernel.
Mampu melihat sistem memanggil bahwa suatu program telah membuat dan apa tanggapan dapat membantu Anda memahami cara kerja dalam program yang menarik bagi Anda atau yang telah Anda tulis. Ini adalah
Apa
Strace.
melakukan
. Ini dapat membantu memecahkan masalah dan mencari kemacetan.
Ini tidak sama dengan
debugging aplikasi
dengan alat seperti
gdb.
. Program debugging memungkinkan Anda menyelidiki operasi internal suatu program saat berjalan. Ini memungkinkan Anda melangkah melalui logika program Anda dan memeriksa memori dan nilai variabel. Sebagai perbandingan, apa
Strace.
Apakah menangkap informasi sistem panggilan karena program berjalan. Ketika program yang ditelusuri berakhir,
Strace.
Daftar informasi panggilan sistem ke jendela terminal.
Panggilan sistem menyediakan segala macam fungsi tingkat rendah, seperti membaca dan menulis tindakan pada file, mematikan proses, dan sebagainya. Ada daftar ratusan panggilan sistem pada Syscalls Man Halaman .
TERKAIT: Debugging dengan GDB: Memulai
Menginstal Strace.
Jika
Strace.
belum diinstal pada komputer Anda, Anda dapat menginstalnya dengan sangat mudah.
Di Ubuntu, gunakan perintah ini:
sudo apt install strace
Pada Fedora, ketik perintah ini:
sudo dnf instal strace
Di Manjaro, perintahnya adalah:
Sudo Pacman -sy Strace
Langkah pertama dengan strace
Kami akan menggunakan program kecil untuk diperagakan
Strace.
. Itu tidak banyak: itu membuka file dan menulis garis teks untuk itu, dan itu tidak memiliki kesalahan yang memeriksa di dalamnya. Itu hanya peretasan cepat sehingga kita memiliki sesuatu untuk digunakan
Strace.
.
#include & lt; stdio.h & gt;
int utama (int argc, char argv []) {
// Handle File.
File * FileGeek;
// buka file yang disebut "strace_demo.txt", atau buat itu
filegeek = fopen ("strace_demo.txt", "W");
// Tulis beberapa teks ke file
fprintf (filegeek, "tulis ini ke file");
// tutup file
FCLOSE (FileGEEK);
// Keluar dari program
kembali (0);
} // akhir utama
Kami menyimpan ini ke dalam file yang disebut "File-io.c" dan dikompilasi dengan
gcc
menjadi eksekusi yang disebut
Stex.
, dinamai untuk "
NS
balapan
mantan
cukup."
gcc -o stex file-io.c
Kami akan menelepon
Strace.
Dari baris perintah dan sampaikan nama yang dapat dieksekusi baru untuk itu sebagai proses yang ingin kami lacak. Kita bisa dengan mudah melacak salah satu perintah Linux atau eksekusi biner lainnya. Kami menggunakan program kecil kami karena dua alasan.
Alasan pertama adalah itu
Strace.
adalah verbose. Mungkin ada banyak output. Itu bagus ketika Anda menggunakan
Strace.
Dalam kemarahan, tetapi bisa berlebihan pada awalnya. Ada Limited.
Strace.
output untuk program kecil kami. Alasan kedua adalah bahwa program kami memiliki fungsi terbatas, dan kode sumber pendek dan langsung. Ini membuatnya lebih mudah untuk mengidentifikasi bagian mana dari output mengacu pada bagian yang berbeda dari kerja internal program.
Strace ./stex
Kita dapat dengan jelas melihat
menulis
panggilan sistem mengirim teks "tulis ini ke file" ke file yang kami buka dan
Exit_Group.
panggilan sistem. Ini mengakhiri semua utas dalam aplikasi dan mengirimkan nilai kembali kembali ke shell.
Memfilter hasilnya
Bahkan dengan program demonstrasi sederhana kami, ada cukup banyak output. Kita bisa menggunakan
-e.
Opsi (ekspresi). Kami akan meneruskan nama panggilan sistem yang ingin kami lihat.
Strace -e menulis ./stex
Anda dapat melaporkan beberapa panggilan sistem dengan menambahkannya sebagai daftar yang dipisahkan koma. Jangan memasukkan spasi putih dalam daftar panggilan sistem.
Strace -e tutup, tulis ./stex
Mengirim output ke file
Manfaat memfilter hasil juga merupakan masalah dengan memfilter output. Anda melihat apa yang Anda minta untuk dilihat, tetapi Anda tidak melihat hal lain. Dan beberapa output lain mungkin lebih bermanfaat bagi Anda daripada hal-hal yang Anda minta untuk dilihat.
Kadang-kadang, lebih mudah untuk menangkap segalanya dan mencari dan menggulir seluruh hambatan hasil. Dengan begitu, Anda tidak akan sengaja mengecualikan sesuatu yang penting. NS
-Hai
Opsi (output) memungkinkan Anda mengirim output dari a
Strace.
sesi ke file teks.
Strace -o Trace-output.txt ./stex
Anda bisa melakukannya
menggunakan
lebih sedikit
memerintah
Untuk menggulir daftar dan mencari panggilan sistem - atau apa pun dengan nama.
lebih sedikit trace-output.txt
Anda sekarang dapat menggunakan semuanya
lebih sedikit
Kemampuan pencarian untuk menyelidiki output.
TERKAIT: Cara menggunakan perintah yang lebih sedikit di Linux
Menambahkan Timestamps
Anda dapat menambahkan beberapa cap waktu berbeda ke output. NS
-R
Opsi (TimesTamps Relative) Menambahkan cap waktu yang menunjukkan perbedaan waktu antara awal setiap panggilan sistem berturut-turut. Perhatikan bahwa nilai waktu ini akan mencakup waktu yang dihabiskan dalam panggilan sistem sebelumnya dan apa pun yang dilakukan oleh program sebelum panggilan sistem berikutnya.
Strace -r ./stex
Stempel waktu ditampilkan pada awal setiap baris output.
Untuk melihat jumlah waktu yang dihabiskan di setiap panggilan sistem, gunakan
-T
Opsi (SSCLALL-Times). Ini menunjukkan durasi waktu yang dihabiskan di dalam setiap panggilan sistem.
Strace -t ./stex
Waktu durasi ditampilkan pada akhir setiap baris panggilan sistem.
Untuk melihat waktu di mana setiap panggilan sistem dipanggil, gunakan
-tt.
Opsi (Timestamps Absolute). Ini menunjukkan waktu "jam dinding", dengan resolusi mikrodetik.
Strace -tt ./stex
Waktu ditampilkan pada awal setiap baris.
Menelusuri proses yang berjalan
Jika proses yang ingin Anda jejak sudah berjalan, Anda masih bisa melampirkan
Strace.
untuk itu. Untuk melakukannya, Anda perlu mengetahui ID proses. Kamu bisa
menggunakan
ps.
dengan
Grep.
untuk menemukan ini. Kami memiliki Firefox. Untuk mengetahui ID dari
Firefox.
proses, kita dapat menggunakan
ps.
dan
Pipe melalui
Grep.
.
PS -E | grep firefox
Kita dapat melihat bahwa ID proses adalah 8483. Kami akan menggunakan
-P
(ID Proses) Opsi untuk memberi tahu
Strace.
proses mana yang akan dilampirkan. Perhatikan bahwa Anda harus menggunakannya
Sudo
:
sudo strace -p 8483
Anda akan melihat pemberitahuan itu
Strace.
telah melekat pada proses, dan kemudian panggilan jejak sistem akan ditampilkan di jendela terminal seperti biasa.
Membuat laporan
NS
-C
(Hanya Ringkasan) Penyebab Opsi
Strace.
untuk mencetak laporan. Ini menghasilkan tabel untuk informasi tentang panggilan sistem yang dibuat oleh program yang ditelusuri.
Strace -C ./stex
Kolomnya adalah:
- % waktu : Persentase waktu eksekusi yang dihabiskan di setiap panggilan sistem.
- detik. : Total waktu yang diungkapkan dalam detik dan mikrodetik yang dihabiskan di setiap panggilan sistem.
- USECS / Panggilan : Waktu rata-rata dalam mikrodetik dihabiskan di setiap panggilan sistem.
- Panggilan : Berapa kali setiap panggilan sistem dieksekusi.
- Kesalahan : Jumlah kegagalan untuk setiap panggilan sistem.
- syscall. : Nama panggilan sistem.
Nilai-nilai ini akan menunjukkan nol untuk program sepele yang melaksanakan dan mengakhiri dengan cepat. Nilai-nilai dunia nyata ditampilkan untuk program yang melakukan sesuatu yang lebih bermakna daripada aplikasi demonstrasi kami.
Wawasan mendalam, mudah
NS
Strace.
Output dapat menunjukkan kepada Anda panggilan sistem mana yang dibuat, yang mana yang sedang dilakukan berulang kali, dan berapa banyak waktu eksekusi yang dihabiskan di dalam kode sisi kernel. Itu informasi hebat. Seringkali, ketika Anda mencoba memahami apa yang terjadi di dalam kode Anda, mudah untuk melupakan bahwa biner Anda berinteraksi hampir tanpa henti dengan kernel untuk melakukan banyak fungsinya.
Dengan menggunakan
Strace.
, Anda melihat gambar lengkapnya.