Ini ialah arahan strace64 yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.
JADUAL:
NAMA
strace - mengesan panggilan dan isyarat sistem
SINOPSIS
helai [-CdffhikqrtttTvVxxxy] [-In] [-bmelaksanakan] [-eexpr]... [-aruang]
[-ofail] [-ssrsize] [-Pjalan]... -ppid... / [-D] [-Evar[=val]]...
[-unama pengguna] arahan [args]
helai -c[df] [-In] [-bmelaksanakan] [-eexpr]... [-Ooverhed] [-Sdisusun mengikut]
-ppid... / [-D] [-Evar[=val]]... [-unama pengguna] arahan [args]
DESCRIPTION
Dalam kes yang paling mudah helai menjalankan yang ditentukan arahan sehingga ia keluar.
Ia memintas dan merekodkan panggilan sistem yang dipanggil oleh a
proses dan isyarat yang diterima oleh proses. Nama
setiap panggilan sistem, hujahnya dan nilai pulangannya dicetak pada
ralat standard atau ke fail yang ditentukan dengan -o pilihan.
helai ialah alat diagnostik, pengajaran dan penyahpepijatan yang berguna.
Pentadbir sistem, pakar diagnostik dan penyelesai masalah akan menemuinya
tidak ternilai untuk menyelesaikan masalah dengan program yang sumbernya
tidak tersedia kerana ia tidak perlu disusun semula mengikut susunan
untuk mengesan mereka. Pelajar, penggodam dan yang terlalu ingin tahu akan mendapatinya
banyak yang boleh dipelajari tentang sistem dan panggilan sistemnya dengan
mengesan walaupun program biasa. Dan pengaturcara akan mendapati bahawa sejak itu
panggilan sistem dan isyarat ialah peristiwa yang berlaku pada pengguna/kernel
antara muka, pemeriksaan rapi sempadan ini sangat berguna untuk pepijat
pengasingan, pemeriksaan kewarasan dan percubaan untuk menangkap keadaan perlumbaan.
Setiap baris dalam jejak mengandungi nama panggilan sistem, diikuti dengannya
hujah dalam kurungan dan nilai pulangannya. Contoh dari
menyusun arahan "cat /dev/null" ialah:
open("/dev/null", O_RDONLY) = 3
Ralat (biasanya nilai pulangan -1) mempunyai simbol dan ralat errno
rentetan dilampirkan.
open("/foo/bar", O_RDONLY) = -1 ENOENT (Tiada fail atau direktori sedemikian)
Isyarat dicetak sebagai simbol isyarat dan struktur tanda yang dinyahkod. An
petikan daripada stracing dan mengganggu arahan "sleep 666" ialah:
sigsuspend([]
--- TANDA {si_signo=SIGINT, si_code=SI_USER, si_pid=...} ---
+++ dibunuh oleh SIGINT +++
Jika panggilan sistem sedang dilaksanakan dan sementara itu satu lagi sedang dijalankan
dipanggil dari benang/proses yang berbeza kemudian helai akan cuba memelihara
susunan acara tersebut dan tandakan panggilan yang sedang berjalan sebagai wujud
belum selesai. Apabila panggilan kembali, ia akan ditanda sebagai disambung semula.
[pid 28772] pilih(4, [3], NULL, NULL, NULL
[pid 28779] clock_gettime(CLOCK_REALTIME, {1130322148, 939977000}) = 0
[pid 28772] <... pilih sambung semula> ) = 1 (dalam [3])
Gangguan panggilan sistem (boleh semula) oleh penghantaran isyarat adalah
diproses secara berbeza kerana kernel menamatkan panggilan sistem dan juga
mengatur pelaksanaan semula serta-merta selepas pengendali isyarat selesai.
baca(0, 0x7ffff72cf5cf, 1) = ? ERESTARTSYS (Untuk dimulakan semula)
--- SIGALRM ... ---
rt_sigreturn(0xe) = 0
baca(0, "", 1) = 0
Hujah dicetak dalam bentuk simbolik dengan semangat. Contoh ini
menunjukkan shell melakukan pengalihan keluar ">>xyzzy":
open("xyzzy", O_WRONLY|O_APPEND|O_CREAT, 0666) = 3
Di sini hujah ketiga terbuka dinyahkodkan dengan memecahkan bendera
hujah ke dalam tiga juzuk bitwise-OR dan mencetak mod
nilai dalam oktal mengikut tradisi. Di mana penggunaan tradisional atau asli berbeza
daripada ANSI atau POSIX, bentuk yang terakhir lebih disukai. Dalam beberapa kes,
helai output telah terbukti lebih mudah dibaca daripada sumbernya.
Petunjuk struktur dinyahrujuk dan ahli dipaparkan sebagai
sesuai. Dalam semua kes, hujah diformat dalam kebanyakan C-like
fesyen mungkin. Sebagai contoh, intipati arahan "ls -l
/dev/null" ditangkap sebagai:
lstat("/dev/null", {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
Perhatikan bagaimana hujah 'stat struct' dinyahrujuk dan cara masing-masing
ahli dipaparkan secara simbolik. Secara khususnya, perhatikan bagaimana
ahli st_mode dinyahkodkan dengan teliti kepada bitwise-OR simbolik dan
nilai angka. Juga perhatikan dalam contoh ini bahawa hujah pertama kepada
lstat ialah input kepada panggilan sistem dan hujah kedua ialah an
pengeluaran. Oleh kerana argumen output tidak diubah suai jika panggilan sistem
gagal, hujah-hujah mungkin tidak selalu ditolak rujukan. Contohnya, mencuba semula
contoh "ls -l" dengan fail yang tidak wujud menghasilkan yang berikut
baris:
lstat("/foo/bar", 0xb004) = -1 ENOENT (Tiada fail atau direktori sedemikian)
Dalam kes ini lampu anjung dihidupkan tetapi tiada sesiapa di rumah.
Penunjuk aksara dinyahrujuk dan dicetak sebagai rentetan C. bukan-
mencetak aksara dalam rentetan biasanya diwakili oleh C biasa
kod melarikan diri. Hanya yang pertama srsize (32 secara lalai) bait rentetan
dicetak; rentetan yang lebih panjang mempunyai elipsis yang dilampirkan berikutan
petikan penutup. Berikut ialah baris dari "ls -l" di mana getpwuid perpustakaan
rutin membaca fail kata laluan:
read(3, "root::0:0:System Administrator:/"..., 1024) = 422
Manakala struktur dianotasi menggunakan pendakap kerinting, penunjuk mudah dan
tatasusunan dicetak menggunakan kurungan segi empat sama dengan pemisah koma
elemen. Berikut ialah contoh daripada arahan "id" pada sistem dengan
id kumpulan tambahan:
getgroups(32, [100, 0]) = 2
Sebaliknya, bit-set juga ditunjukkan menggunakan kurungan segi empat sama tetapi
elemen set hanya dipisahkan oleh ruang. Inilah cangkangnya
bersedia untuk melaksanakan arahan luaran:
sigprocmask(SIG_BLOCK, [CHLD TTOU], []) = 0
Di sini hujah kedua ialah set bit dua isyarat, SIGCHLD dan
SIGTTOU. Dalam sesetengah kes, set bit terlalu penuh sehingga mencetak
elemen yang tidak ditetapkan adalah lebih berharga. Dalam kes itu, set bit diberi awalan
oleh tilde seperti ini:
sigprocmask(SIG_UNBLOCK, ~[], NULL) = 0
Di sini hujah kedua mewakili set penuh semua isyarat.
PILIHAN
-c Kira masa, panggilan dan ralat untuk setiap panggilan sistem
dan melaporkan ringkasan mengenai program keluar. Di Linux,
ini cuba untuk menunjukkan masa sistem (masa CPU yang dibelanjakan
berjalan dalam kernel) bebas daripada jam dinding
masa. Sekiranya -c digunakan dengan -f or -F (di bawah), sahaja
jumlah agregat untuk semua proses yang dikesan disimpan.
-C suka -c tetapi juga mencetak output biasa manakala
proses sedang berjalan.
-D Jalankan proses pengesan sebagai cucu yang terpisah, bukan sebagai
ibu bapa kepada tracee. Ini mengurangkan yang boleh dilihat
kesan daripada helai dengan mengekalkan jejak secara langsung
anak proses panggilan.
-d Tunjukkan beberapa keluaran penyahpepijatan helai sendiri pada
kesalahan biasa.
-f Jejaki proses kanak-kanak kerana ia dicipta oleh
proses yang dikesan pada masa ini akibat daripada
garpu(2), vfork(2) dan mengklon(2) panggilan sistem. Catatan
Bahawa -p PID -f akan melampirkan semua rangkaian proses
PID jika ia berbilang benang, bukan sahaja benang dengan
thread_id = PID.
-ff Jika -o nama fail pilihan berkuat kuasa, masing-masing
surih proses ditulis kepada nama fail.pid mana pid
ialah id proses berangka setiap proses. Ini adalah
tidak serasi dengan -c, kerana tiada per-proses dikira
disimpan.
-F Pilihan ini kini sudah usang dan ia mempunyai perkara yang sama
kefungsian sebagai -f.
-h Cetak ringkasan bantuan.
-i Cetak penunjuk arahan pada masa
panggilan sistem.
-k Cetak surih tindanan pelaksanaan yang dikesan
proses selepas setiap panggilan sistem (eksperimen).
Pilihan ini tersedia hanya jika helai dibina
dengan libunwind.
-q Sekat mesej tentang melampirkan, menanggalkan dsb.
Ini berlaku secara automatik apabila output diubah hala
ke fail dan arahan dijalankan secara langsung dan bukannya
melampirkan.
-qq Jika diberikan dua kali, sekat mesej tentang proses keluar
status.
-r Cetak cap waktu relatif apabila masuk ke setiap sistem
panggilan. Ini merekodkan perbezaan masa antara
permulaan panggilan sistem berturut-turut.
-t Awalan setiap baris jejak dengan masa dalam sehari.
-tt Jika diberi dua kali, masa yang dicetak akan termasuk
mikrosaat.
-ttt Jika diberi tiga kali, masa yang dicetak akan termasuk
mikrosaat dan bahagian utama akan dicetak
sebagai bilangan saat sejak zaman itu.
-T Tunjukkan masa yang dihabiskan dalam panggilan sistem. Ini merekodkan
perbezaan masa antara permulaan dan
tamat setiap panggilan sistem.
-w Ringkaskan perbezaan masa antara permulaan
dan tamat setiap panggilan sistem. Lalainya ialah
meringkaskan masa sistem.
-v Cetak versi persekitaran yang tidak disingkat, statistik,
panggilan termios, dsb. Struktur ini sangat
biasa dalam panggilan dan tingkah laku lalai dipaparkan
subset munasabah ahli struktur. Guna ini
pilihan untuk mendapatkan semua butiran berdarah.
-V Cetak nombor versi helai.
-x Cetak semua rentetan bukan ASCII dalam rentetan perenambelasan
format.
-xx Cetak semua rentetan dalam format rentetan heksadesimal.
-y Cetak laluan yang dikaitkan dengan deskriptor fail
hujah-hujah.
-yy Cetak ip:pasangan port yang dikaitkan dengan fail soket
deskriptor.
-a ruang Jajarkan nilai pulangan dalam lajur tertentu (lalai
lajur 40).
-b syscall Jika syscall yang ditentukan dicapai, tanggalkan daripada yang dikesan
proses. Pada masa ini, hanya melaksanakan syscall ialah
disokong. Pilihan ini berguna jika anda mahu
mengesan proses berbilang benang dan oleh itu memerlukan
-f, tetapi tidak mahu mengesannya (berpotensi sangat
kompleks) kanak-kanak.
-e expr Ungkapan kelayakan yang mengubah suai acara
untuk mengesan atau bagaimana untuk mengesannya. Format bagi
ungkapan ialah:
[layak=][!]nilai1[,nilai2]...
di mana layak adalah salah satu mengesan, singkatan, kata kerja,
mentah, isyarat, membaca, Atau menulis and nilai ialah
simbol atau nombor yang bergantung kepada kelayakan. lalai
kelayakan ialah mengesan. Menggunakan tanda seru
menafikan set nilai. Sebagai contoh, -e membuka
bermakna secara literal -e mengesan=membuka yang seterusnya bermaksud
jejak sahaja membuka panggilan sistem. Sebaliknya,
-e mengesan=!membuka bermakna untuk mengesan setiap panggilan sistem
kecuali membuka. Di samping itu, nilai-nilai istimewa semua
and tiada mempunyai makna yang jelas.
Ambil perhatian bahawa beberapa cangkang menggunakan tanda seru untuk
pengembangan sejarah walaupun di dalam hujah yang dipetik. Jika
jadi, anda mesti melepaskan tanda seru dengan a
garis miring ke belakang.
-e mengesan=menetapkan
Jejaki set panggilan sistem yang ditentukan sahaja. The
-c pilihan berguna untuk menentukan sistem yang mana
panggilan mungkin berguna untuk dikesan. Sebagai contoh,
mengesan=buka, tutup, baca, tulis bermakna hanya menjejak
empat panggilan sistem itu. Berhati-hati semasa membuat
inferens tentang sempadan pengguna/kernel jika hanya a
subset panggilan sistem sedang dipantau. The
lalai adalah mengesan=semua.
-e mengesan=fail
Jejaki semua panggilan sistem yang mengambil nama fail sebagai
hujah. Anda boleh menganggap ini sebagai singkatan
khususnya -e mengesan=membuka,stat,Chmod,nyahpaut,... iaitu
berguna untuk melihat fail proses itu
merujuk. Tambahan pula, menggunakan singkatan
akan memastikan bahawa anda tidak sengaja terlupa
sertakan panggilan seperti lstat dalam senarai. Betchya
akan lupa yang itu.
-e mengesan=proses
Jejaki semua panggilan sistem yang melibatkan proses
pengurusan. Ini berguna untuk melihat garpu,
tunggu, dan laksanakan langkah sesuatu proses.
-e mengesan=rangkaian
Jejaki semua panggilan sistem berkaitan rangkaian.
-e mengesan=isyarat
Jejaki semua panggilan sistem berkaitan isyarat.
-e mengesan=ipc
Jejaki semua panggilan sistem berkaitan IPC.
-e mengesan=menurun
Jejaki semua panggilan sistem berkaitan deskriptor fail.
-e mengesan=memori
Jejaki semua panggilan sistem berkaitan pemetaan memori.
-e singkatan=menetapkan
Ringkaskan output daripada mencetak setiap ahli
struktur besar. Lalainya ialah singkatan=semua. Yang
-v pilihan mempunyai kesan singkatan=tiada.
-e kata kerja=menetapkan
Struktur penyahrujukan untuk set yang ditentukan
panggilan sistem. Lalainya ialah kata kerja=semua.
-e mentah=menetapkan Cetak argumen mentah dan tidak dinyahkod untuk set yang ditentukan
daripada panggilan sistem. Pilihan ini mempunyai kesan
menyebabkan semua hujah dicetak dalam perenambelasan.
Ini kebanyakannya berguna jika anda tidak mempercayainya
penyahkodan atau anda perlu tahu angka sebenar
nilai sesuatu hujah.
-e isyarat=menetapkan
Jejaki hanya subset isyarat yang ditentukan. The
lalai adalah isyarat=semua. Sebagai contoh, isyarat =! SIGIO
(Atau isyarat=!io) menyebabkan isyarat SIGIO tidak
dikesan.
-e membaca=menetapkan Lakukan pembuangan heksadesimal dan ASCII penuh bagi semua
data dibaca daripada deskriptor fail yang disenaraikan dalam
set yang ditetapkan. Sebagai contoh, untuk melihat semua input
aktiviti pada deskriptor fail 3 and 5 penggunaan
-e membaca=3,5. Ambil perhatian bahawa ini adalah bebas daripada
pengesanan biasa membaca(2) panggilan sistem iaitu
dikawal oleh pilihan -e mengesan=membaca.
-e menulis=menetapkan
Lakukan pembuangan heksadesimal dan ASCII penuh bagi semua
data yang ditulis kepada deskriptor fail yang disenaraikan dalam
set yang ditetapkan. Sebagai contoh, untuk melihat semua output
aktiviti pada deskriptor fail 3 and 5 penggunaan
-e menulis=3,5. Ambil perhatian bahawa ini adalah bebas daripada
pengesanan biasa bagi menulis(2) panggilan sistem yang
dikawal oleh pilihan -e mengesan=menulis.
-I boleh terganggu
Apabila strace boleh diganggu oleh isyarat (seperti
menekan ^C). 1: tiada isyarat disekat; 2: maut
isyarat disekat semasa menyahkod syscall
(lalai); 3: isyarat maut sentiasa disekat
(lalai jika '-o FILE PROG'); 4: isyarat maut dan
SIGTSTP (^Z) sentiasa disekat (berguna untuk dibuat
strace -o FAIL PROG tidak berhenti pada ^Z).
-o nama fail Tulis output surih ke fail nama fail sebaliknya
daripada stderr. guna nama fail.pid if -ff digunakan.
Jika hujah bermula dengan '|' atau dengan '!' kemudiannya
selebihnya hujah dianggap sebagai perintah dan semua
output disalurkan kepadanya. Ini sesuai untuk
memaipkan output penyahpepijatan ke program tanpa
menjejaskan pengalihan semula program yang dilaksanakan.
-O overhed Tetapkan overhed untuk mengesan panggilan sistem ke
overhed mikrosaat. Ini berguna untuk
mengatasi heuristik lalai untuk meneka bagaimana
banyak masa dihabiskan hanya untuk mengukur bila masa
panggilan sistem menggunakan -c pilihan. Ketepatan
heuristik boleh diukur dengan menetapkan masa yang diberikan
program dijalankan tanpa pengesanan (menggunakan masa(1)) dan
membandingkan masa panggilan sistem terkumpul kepada
jumlah yang dihasilkan menggunakan -c.
-p pid Lampirkan pada proses dengan ID proses pid and
mula menjejak. Jejak boleh ditamatkan pada bila-bila masa
masa dengan isyarat sampuk papan kekunci (CTRL-C).
helai akan bertindak balas dengan melepaskan diri daripada
proses yang dikesan meninggalkannya (mereka) untuk diteruskan
berlari. Pelbagai -p pilihan boleh digunakan untuk melampirkan
kepada banyak proses. -p "`pidof PROG`" sintaks ialah
disokong.
-P jalan Jejaki sahaja panggilan sistem mengakses laluan. Pelbagai -P
pilihan boleh digunakan untuk menentukan beberapa laluan.
-s srsize Tentukan saiz rentetan maksimum untuk dicetak (the
lalai ialah 32). Ambil perhatian bahawa nama fail tidak
dianggap rentetan dan sentiasa dicetak sepenuhnya.
-S disusun mengikut Isih keluaran histogram yang dicetak oleh -c
pilihan mengikut kriteria yang ditetapkan. Nilai undang-undang adalah
masa, panggilan, nama, dan apa-apa (lalai adalah masa).
-u nama pengguna Jalankan arahan dengan ID pengguna, ID kumpulan dan
kumpulan tambahan daripada nama pengguna. Pilihan ini adalah
hanya berguna apabila berjalan sebagai root dan membolehkan
pelaksanaan yang betul bagi binari setuid dan/atau setgid.
Melainkan pilihan ini digunakan setuid dan setgid
program dilaksanakan tanpa keistimewaan yang berkesan.
-E var=val Jalankan arahan dengan var=val dalam senarai persekitarannya
pembolehubah.
-E var Batalkan var daripada senarai persekitaran yang diwarisi
pembolehubah sebelum menyampaikannya kepada arahan.
DIAGNOSTIK
Bila arahan pintu keluar, helai keluar dengan status keluar yang sama. Jika
arahan ditamatkan oleh isyarat, helai menamatkan dirinya dengan
isyarat yang sama, supaya helai boleh digunakan sebagai proses pembalut
telus kepada proses induk yang menggunakan. Perhatikan bahawa ibu bapa-
hubungan anak (pemberitahuan berhenti isyarat, nilai getppid(),
dll) antara proses yang dikesan dan induknya tidak dipelihara
melainkan jika -D digunakan.
Apabila menggunakan -p, status keluar daripada helai adalah sifar melainkan ada
adalah kesilapan yang tidak dijangka dalam melakukan pengesanan.
SETUID PEMASANGAN
If helai dipasang setuid kepada root kemudian pengguna yang memanggil
akan dapat melampirkan dan mengesan proses yang dimiliki oleh mana-mana pengguna.
Selain itu program setuid dan setgid akan dilaksanakan dan
dikesan dengan keistimewaan berkesan yang betul. Memandangkan hanya pengguna
dipercayai dengan keistimewaan akar penuh harus dibenarkan untuk melakukan ini
perkara, ia hanya masuk akal untuk dipasang helai sebagai setuid kepada root
apabila pengguna yang boleh melaksanakannya dihadkan kepada pengguna tersebut
yang mempunyai amanah ini. Sebagai contoh, masuk akal untuk memasang a
versi khas helai dengan mod 'rwsr-xr--', pengguna akar and
kumpulan mengesan, di mana ahli-ahli mengesan kumpulan adalah pengguna yang dipercayai.
Jika anda menggunakan ciri ini, sila ingat untuk memasang bukan-
versi setuid daripada helai untuk luser biasa untuk digunakan.
Gunakan strace64 dalam talian menggunakan perkhidmatan onworks.net
