Ini adalah perintah strace64 yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa stasiun kerja online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS
PROGRAM:
NAMA
strace - melacak panggilan dan sinyal sistem
RINGKASAN
jejak [-CdffhikqrtttTvVxxy] [-In] [-beksekutif] [-ecepat]...[-akolom]
[-ofillet] [-sukuran besar] [-Ppath] ... -ppid... / [-D] [-Eadalah[=val]]...
[-unama pengguna] Command [args]
jejak -c[df] [-In] [-beksekutif] [-ecepat]...[-Oatas] [-SSortir dengan]
-ppid... / [-D] [-Eadalah[=val]]... [-unama pengguna] Command [args]
DESKRIPSI
Dalam kasus yang paling sederhana jejak menjalankan yang ditentukan Command sampai keluar.
Ini memotong dan merekam panggilan sistem yang dipanggil oleh a
proses dan sinyal yang diterima oleh proses. Nama dari
setiap panggilan sistem, argumennya, dan nilai pengembaliannya dicetak pada
kesalahan standar atau ke file yang ditentukan dengan -o .
jejak adalah alat diagnostik, instruksional, dan debugging yang berguna.
Administrator sistem, diagnosa, dan pemecah masalah akan menemukannya
sangat berharga untuk memecahkan masalah dengan program yang sumbernya
tidak tersedia karena tidak perlu dikompilasi ulang secara berurutan
untuk melacak mereka. Siswa, peretas, dan yang terlalu ingin tahu akan menemukan itu
banyak hal yang dapat dipelajari tentang suatu sistem dan panggilan sistemnya dengan
menelusuri bahkan program biasa. Dan programmer akan menemukannya sejak
panggilan sistem dan sinyal adalah peristiwa yang terjadi pada pengguna/kernel
antarmuka, pemeriksaan dekat batas ini sangat berguna untuk bug
isolasi, pemeriksaan kewarasan dan mencoba untuk menangkap kondisi balapan.
Setiap baris dalam jejak berisi nama panggilan sistem, diikuti oleh
argumen dalam tanda kurung dan nilai kembaliannya. Contoh dari
menelusuri perintah "cat /dev/null" adalah:
buka("/ dev/null", O_RDONLY) = 3
Kesalahan (biasanya nilai balik -1) memiliki simbol errno dan kesalahan
string ditambahkan.
open("/foo/bar", O_RDONLY) = -1 ENOENT (Tidak ada file atau direktori seperti itu)
Sinyal dicetak sebagai simbol sinyal dan struktur siginfo yang didekodekan. NS
kutipan dari stracing dan interupsi perintah "sleep 666" adalah:
penangguhan ([]
--- TANDA TANGAN {si_signo=SIGINT, si_code=SI_USER, si_pid=...} ---
+++ dibunuh oleh SIGINT +++
Jika panggilan sistem sedang dijalankan dan sementara yang lain sedang
dipanggil dari utas/proses yang berbeda kemudian jejak akan mencoba melestarikan
urutan acara tersebut dan tandai panggilan yang sedang berlangsung sebagai
belum selesai. Saat panggilan kembali, itu akan ditandai sebagai dilanjutkan.
[pid 28772] pilih(4, [3], NULL, NULL, NULL
[pid 28779] clock_gettime(CLOCK_REALTIME, {1130322148, 939977000}) = 0
[pid 28772] <... pilih dilanjutkan> ) = 1 (dalam [3])
Interupsi panggilan sistem (yang dapat dimulai ulang) oleh pengiriman sinyal adalah
diproses secara berbeda saat kernel mengakhiri panggilan sistem dan juga
mengatur eksekusi ulang segera setelah penangan sinyal selesai.
baca(0, 0x7ffff72cf5cf, 1) = ? ERESTARTSYS (Untuk memulai ulang)
---SIGALRM... ---
rt_sigreturn(0x) = 0
baca(0, "", 1) = 0
Argumen dicetak dalam bentuk simbolis dengan penuh semangat. Contoh ini
menunjukkan shell melakukan pengalihan output ">>xyzzy":
buka("xyzzy", O_WRONLY|O_APPEND|O_CREAT, 0666) = 3
Di sini argumen ketiga dari open didekodekan dengan mendobrak bendera
argumen ke dalam tiga konstituen bitwise-OR dan mencetak mode
nilai dalam oktal menurut tradisi. Di mana penggunaan tradisional atau asli berbeda
dari ANSI atau POSIX, bentuk yang terakhir lebih disukai. Dalam beberapa kasus,
jejak output telah terbukti lebih mudah dibaca daripada sumbernya.
Penunjuk struktur direferensikan dan anggota ditampilkan sebagai
sesuai. Dalam semua kasus, argumen diformat dengan paling mirip-C
mode mungkin. Misalnya, inti dari perintah "ls -l
/dev/null" ditangkap sebagai:
lstat("/dev/null", {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
Perhatikan bagaimana argumen 'struct stat' didereferensi dan bagaimana masing-masing
anggota ditampilkan secara simbolis. Secara khusus, amati bagaimana
anggota st_mode secara hati-hati diterjemahkan menjadi bitwise-OR dari simbol dan
nilai numerik. Perhatikan juga dalam contoh ini bahwa argumen pertama untuk
lstat adalah input ke panggilan sistem dan argumen kedua adalah
keluaran. Karena argumen keluaran tidak dimodifikasi jika sistem memanggil
gagal, argumen mungkin tidak selalu direferensikan. Misalnya, mencoba lagi
contoh "ls -l" dengan file yang tidak ada menghasilkan yang berikut:
garis:
lstat("/foo/bar", 0xb004) = -1 ENOENT (Tidak ada file atau direktori seperti itu)
Dalam hal ini lampu teras menyala tetapi tidak ada orang di rumah.
Pointer karakter didereferensi dan dicetak sebagai string C. Non-
karakter pencetakan dalam string biasanya diwakili oleh C . biasa
kode pelarian. Hanya yang pertama ukuran besar (32 secara default) byte string
dicetak; string yang lebih panjang memiliki elipsis yang ditambahkan mengikuti
kutipan penutup. Berikut adalah baris dari "ls -l" di mana dapatkanpwuid perpustakaan
rutin membaca file kata sandi:
read(3, "root::0:0:System Administrator:/"..., 1024) = 422
Sementara struktur dianotasi menggunakan kurung kurawal, pointer sederhana dan
array dicetak menggunakan tanda kurung siku dengan pemisah koma
elemen. Berikut adalah contoh dari perintah "id" pada sistem dengan
id grup tambahan:
getgroups(32, [100, 0]) = 2
Di sisi lain, bit-set juga ditampilkan menggunakan tanda kurung siku tetapi
elemen himpunan hanya dipisahkan oleh spasi. Ini cangkangnya
bersiap untuk menjalankan perintah eksternal:
sigprocmask(SIG_BLOCK, [CHLD TTOU], []) = 0
Di sini argumen kedua adalah bit-set dari dua sinyal, SIGCHLD dan
SIGTTOU. Dalam beberapa kasus, bit-set sangat penuh sehingga mencetak
elemen yang tidak disetel lebih berharga. Dalam hal ini, bit-set diawali
oleh tilde seperti ini:
sigprocmask(SIG_UNBLOCK, ~[], NULL) = 0
Di sini argumen kedua mewakili set lengkap semua sinyal.
PILIHAN
-c Hitung waktu, panggilan, dan kesalahan untuk setiap panggilan sistem
dan laporkan ringkasan saat keluar dari program. Di Linux,
ini mencoba untuk menunjukkan waktu sistem (waktu CPU yang dihabiskan
berjalan di kernel) tidak tergantung pada jam dinding
waktu. Jika -c digunakan dengan -f or -F (di bawah), hanya
total agregat untuk semua proses yang ditelusuri disimpan.
-C Seperti -c tetapi juga mencetak keluaran reguler saat
proses sedang berjalan.
-D Jalankan proses pelacak sebagai cucu yang terpisah, bukan sebagai
induk dari tracee. Ini mengurangi yang terlihat
efek dari jejak dengan menjaga tracee secara langsung
anak dari proses pemanggilan.
-d Tampilkan beberapa keluaran debug dari jejak sendiri pada
kesalahan standar.
-f Lacak proses anak saat dibuat oleh
proses yang saat ini ditelusuri sebagai akibat dari
garpu(2) garpu(2) dan clone(2) panggilan sistem. Catatan
bahwa -p PID -f akan melampirkan semua utas proses
PID jika multi-utas, tidak hanya utas dengan
utas_id = PID.
-ff Jika -o nama file opsi berlaku, masing-masing
proses jejak ditulis ke nama file.pid dimana pid
adalah id proses numerik dari setiap proses. Ini adalah
tidak cocok dengan -c, karena tidak ada per-proses yang diperhitungkan
disimpan.
-F Opsi ini sekarang sudah usang dan memiliki hal yang sama
fungsi sebagai -f.
-h Cetak ringkasan bantuan.
-i Cetak penunjuk instruksi pada saat
panggilan sistem.
-k Cetak jejak tumpukan eksekusi dari yang dilacak
proses setelah setiap panggilan sistem (eksperimental).
Opsi ini hanya tersedia jika jejak dibangun
dengan libunwind.
-q Menekan pesan tentang melampirkan, melepaskan dll.
Ini terjadi secara otomatis ketika output diarahkan
ke file dan perintah dijalankan langsung alih-alih
melampirkan.
-qq Jika diberikan dua kali, tekan pesan tentang proses keluar
status.
-r Cetak stempel waktu relatif saat masuk ke setiap sistem
panggilan. Ini mencatat perbedaan waktu antara
awal dari panggilan sistem yang berurutan.
-t Awalan setiap baris jejak dengan waktu hari.
-tt Jika diberikan dua kali, waktu yang dicetak akan mencakup
mikrodetik.
-ttt Jika diberikan tiga kali, waktu yang dicetak akan mencakup
mikrodetik dan bagian depan akan dicetak
sebagai jumlah detik sejak zaman.
-T Tampilkan waktu yang dihabiskan dalam panggilan sistem. Catatan ini
perbedaan waktu antara awal dan
akhir setiap panggilan sistem.
-w Ringkaskan perbedaan waktu antara awal
dan akhir setiap panggilan sistem. Standarnya adalah untuk
meringkas waktu sistem.
-v Cetak versi lingkungan, stat,
termios, dll. panggilan. Struktur ini sangat
umum dalam panggilan dan perilaku default ditampilkan
bagian yang masuk akal dari anggota struktur. Gunakan ini
pilihan untuk mendapatkan semua detail berdarah.
-V Cetak nomor versi dari jejak.
-x Cetak semua string non-ASCII dalam string heksadesimal
Format.
-xx Cetak semua string dalam format string heksadesimal.
-y Jalur cetak yang terkait dengan deskriptor file
argumen.
-Y y Cetak ip:pasangan port yang terkait dengan file soket
deskriptor.
-a kolom Sejajarkan nilai pengembalian dalam kolom tertentu (default
kolom 40).
-b panggilan sistem Jika syscall yang ditentukan tercapai, lepaskan dari yang dilacak
proses. Saat ini, hanya eksekutif panggilan sistem adalah
didukung. Opsi ini berguna jika Anda ingin
melacak proses multi-utas dan karenanya memerlukan
-f, tetapi tidak ingin melacaknya (berpotensi sangat
kompleks) anak-anak.
-e cepat Ekspresi kualifikasi yang mengubah acara mana
untuk melacak atau bagaimana untuk melacak mereka. Format dari
ekspresi adalah:
[kualifikasi=][!]value1[,value2] ...
dimana kualifikasi adalah salah satu jejak, singkatan, bertele-tele,
mentah, sinyal, Baca baca, atau menulis dan nilai adalah
simbol atau nomor yang bergantung pada kualifikasi. Standarnya
kualifikasi adalah jejak. Menggunakan tanda seru
meniadakan himpunan nilai. Sebagai contoh, -e Buka
berarti secara harfiah -e jejak=Buka yang pada gilirannya berarti
melacak hanya Buka panggilan sistem. Sebaliknya,
-e jejak=!Buka berarti melacak setiap panggilan sistem
kecuali Buka. Selain itu, nilai-nilai khusus semua
dan tak satupun memiliki arti yang jelas.
Perhatikan bahwa beberapa shell menggunakan tanda seru untuk
ekspansi sejarah bahkan di dalam argumen yang dikutip. Jika
jadi, Anda harus menghindari tanda seru dengan
garis miring terbalik.
-e jejak=set
Lacak hanya kumpulan panggilan sistem yang ditentukan. NS
-c opsi berguna untuk menentukan sistem mana
panggilan mungkin berguna untuk dilacak. Sebagai contoh,
jejak=buka, tutup, baca, tulis berarti hanya melacak
empat panggilan sistem itu. Hati-hati saat membuat
kesimpulan tentang batas pengguna/kernel jika hanya a
subset dari panggilan sistem sedang dipantau. NS
defaultnya adalah jejak=semua.
-e jejak=fillet
Lacak semua panggilan sistem yang menggunakan nama file sebagai
argumen. Anda dapat menganggap ini sebagai singkatan
untuk -e jejak=Buka,Stat,chmod,batalkan tautan,... yang
berguna untuk melihat file apa prosesnya
referensi. Selanjutnya, menggunakan singkatan
akan memastikan bahwa Anda tidak sengaja lupa untuk
termasuk panggilan seperti status dalam daftar. Betchya
akan melupakan yang itu.
-e jejak=proses
Lacak semua panggilan sistem yang melibatkan proses
pengelolaan. Ini berguna untuk menonton garpu,
tunggu, dan jalankan langkah-langkah dari suatu proses.
-e jejak=jaringan
Lacak semua panggilan sistem terkait jaringan.
-e jejak=sinyal
Lacak semua panggilan sistem terkait sinyal.
-e jejak=IPC
Lacak semua panggilan sistem terkait IPC.
-e jejak=desc
Lacak semua panggilan sistem terkait deskriptor file.
-e jejak=ingatan
Lacak semua panggilan sistem terkait pemetaan memori.
-e singkatan=set
Menyingkat output dari pencetakan setiap anggota
struktur besar. Standarnya adalah singkatan=semua. itu
-v pilihan memiliki efek singkatan=tak satupun.
-e bertele-tele=set
Struktur dereferensi untuk himpunan yang ditentukan dari
panggilan sistem. Standarnya adalah bertele-tele=semua.
-e mentah=set Cetak argumen mentah yang tidak dikodekan untuk set yang ditentukan
dari panggilan sistem. Opsi ini memiliki efek
menyebabkan semua argumen dicetak dalam heksadesimal.
Ini sangat berguna jika Anda tidak memercayai
decoding atau Anda perlu tahu numerik yang sebenarnya
nilai sebuah argumen.
-e sinyal=set
Lacak hanya subset sinyal yang ditentukan. NS
defaultnya adalah sinyal=semua. Sebagai contoh, sinyal =! SIGIO
(Atau sinyal=!io) menyebabkan sinyal SIGIO tidak menjadi
dilacak.
-e Baca baca=set Lakukan dump penuh heksadesimal dan ASCII dari semua
data dibaca dari deskriptor file yang terdaftar di
ditetapkan. Misalnya, untuk melihat semua masukan
aktivitas pada deskriptor file 3 dan 5 menggunakan
-e Baca baca=3,5. Perhatikan bahwa ini tidak tergantung pada
penelusuran normal Baca baca(2) panggilan sistem yang
dikendalikan oleh opsi -e jejak=Baca baca.
-e menulis=set
Lakukan dump penuh heksadesimal dan ASCII dari semua
data yang ditulis ke deskriptor file yang tercantum dalam
ditetapkan. Misalnya, untuk melihat semua keluaran
aktivitas pada deskriptor file 3 dan 5 menggunakan
-e menulis=3,5. Perhatikan bahwa ini tidak tergantung pada
penelusuran normal menulis(2) panggilan sistem yang
dikendalikan oleh opsi -e jejak=menulis.
-I dapat diinterupsi
Ketika strace dapat diinterupsi oleh sinyal (seperti
menekan ^C). 1: tidak ada sinyal yang diblokir; 2: fatal
sinyal diblokir saat decoding syscall
(bawaan); 3: sinyal fatal selalu diblokir
(default jika '-o FILE PROG'); 4: sinyal fatal dan
SIGTSTP (^Z) selalu diblokir (berguna untuk membuat
strace -o FILE PROG tidak berhenti di ^Z).
-o nama file Tulis hasil jejak ke file nama file agak
daripada ke stderr. Menggunakan nama file.pid if -ff digunakan.
Jika argumen dimulai dengan '|' atau dengan '!' lalu
sisa argumen diperlakukan sebagai perintah dan semua
output disalurkan ke sana. Ini nyaman untuk
menyalurkan output debug ke program tanpa
mempengaruhi pengalihan program yang dijalankan.
-O atas Atur overhead untuk melacak panggilan sistem ke
atas mikrodetik. Ini berguna untuk
mengesampingkan heuristik default untuk menebak caranya
banyak waktu dihabiskan hanya untuk mengukur kapan waktunya
panggilan sistem menggunakan -c pilihan. Akurasi dari
heuristik dapat diukur dengan waktu yang diberikan
program berjalan tanpa tracing (menggunakan waktu(1)) dan
membandingkan akumulasi waktu panggilan sistem dengan
total yang diproduksi menggunakan -c.
-p pid Lampirkan ke proses dengan ID proses pid dan
mulai melacak. Jejak dapat dihentikan kapan saja
waktu oleh sinyal interupsi keyboard (CTRL-C).
jejak akan merespon dengan melepaskan diri dari
proses yang dilacak meninggalkannya (mereka) untuk melanjutkan
berlari. banyak -p opsi dapat digunakan untuk melampirkan
ke banyak proses. -p sintaks "`pidof PROG`" adalah
didukung.
-P path Lacak hanya panggilan sistem yang mengakses jalan. kelipatan -P
pilihan dapat digunakan untuk menentukan beberapa jalur.
-s ukuran besar Tentukan ukuran string maksimum yang akan dicetak (
standarnya adalah 32). Perhatikan bahwa nama file tidak
dianggap string dan selalu dicetak secara penuh.
-S Sortir dengan Urutkan output dari histogram yang dicetak oleh -c
pilihan dengan kriteria yang ditentukan. Nilai hukum adalah
waktu, panggilan, nama, dan tidak ada (defaultnya adalah waktu).
-u nama pengguna Jalankan perintah dengan ID pengguna, ID grup, dan
kelompok pelengkap nama pengguna. Pilihan ini adalah
hanya berguna saat dijalankan sebagai root dan mengaktifkan
eksekusi yang benar dari setuid dan/atau binari setgid.
Kecuali opsi ini digunakan setuid dan setgid
program dijalankan tanpa hak istimewa yang efektif.
-E adalah=val Jalankan perintah dengan adalah=val dalam daftar lingkungannya
variabel.
-E adalah Hapus adalah dari daftar lingkungan yang diwarisi
variabel sebelum meneruskannya ke perintah.
DIAGNOSTIK
Ketika Command keluar, jejak keluar dengan status keluar yang sama. Jika
Command diakhiri dengan sinyal, jejak berakhir dengan sendirinya dengan
sinyal yang sama, sehingga jejak dapat digunakan sebagai proses pembungkus
transparan untuk proses induk pemanggilan. Perhatikan bahwa orang tua-
hubungan anak (pemberitahuan penghentian sinyal, nilai getppid(),
dll) antara proses yang dilacak dan induknya tidak dipertahankan
kecuali kalau -D digunakan.
Ketika menggunakan -p, status keluar dari jejak adalah nol kecuali ada
adalah kesalahan yang tidak terduga dalam melakukan penelusuran.
SETUID INSTALASI
If jejak diinstal setuid ke root kemudian pengguna yang memanggil
akan dapat melampirkan dan melacak proses yang dimiliki oleh pengguna mana pun.
Selain itu program setuid dan setgid akan dijalankan dan
dilacak dengan hak efektif yang benar. Karena hanya pengguna
dipercaya dengan hak akses root penuh harus diizinkan untuk melakukan ini
hal-hal, masuk akal untuk menginstal jejak sebagai setuid untuk root
ketika pengguna yang dapat menjalankannya dibatasi untuk pengguna tersebut
yang memiliki kepercayaan ini. Misalnya, masuk akal untuk menginstal a
versi khusus dari jejak dengan mode 'rwsr-xr--', pengguna akar dan
kelompok jejak, dimana anggota jejak grup adalah pengguna tepercaya.
Jika Anda menggunakan fitur ini, harap ingat untuk menginstal non-
versi setuid dari jejak untuk digunakan lusers biasa.
Gunakan strace64 online menggunakan layanan onworks.net
