strace - Online di Cloud

Ini adalah strace perintah yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation 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 mencegat dan
merekam panggilan sistem yang dipanggil oleh suatu proses dan sinyal yang diterima
oleh sebuah proses. Nama setiap panggilan sistem, argumennya, dan nilai pengembaliannya adalah
dicetak pada kesalahan standar atau ke file yang ditentukan dengan -o .

jejak adalah alat diagnostik, instruksional, dan debugging yang berguna. Administrator sistem,
diagnostik dan pemecah masalah akan merasa sangat berharga untuk memecahkan masalah dengan
program yang sumbernya tidak tersedia karena tidak perlu
dikompilasi ulang untuk melacaknya. Siswa, peretas, dan yang terlalu ingin tahu akan menemukannya
bahwa banyak yang dapat dipelajari tentang suatu sistem dan panggilan sistemnya dengan menelusuri genap
program biasa. Dan pemrogram akan menemukan bahwa karena panggilan sistem dan sinyal adalah
peristiwa yang terjadi pada antarmuka pengguna/kernel, pemeriksaan dekat batas ini adalah
sangat berguna untuk isolasi bug, pemeriksaan kewarasan dan mencoba untuk menangkap kondisi balapan.

Setiap baris dalam jejak berisi nama panggilan sistem, diikuti dengan argumennya di
kurung dan nilai kembaliannya. Contoh dari stracing perintah "cat /dev/null"
adalah:

buka("/ dev/null", O_RDONLY) = 3

Kesalahan (biasanya nilai kembalian -1) memiliki simbol errno dan string kesalahan yang 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. Sebuah 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 dipanggil dari a
utas/proses yang berbeda kemudian jejak akan mencoba untuk menjaga urutan peristiwa itu 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 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 keluaran ">>xyzzy":

buka("xyzzy", O_WRONLY|O_APPEND|O_CREAT, 0666) = 3

Di sini argumen ketiga dari open didekodekan dengan memecah argumen flag menjadi
tiga bitwise-OR konstituen dan mencetak nilai mode 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 sebagaimana mestinya. Secara keseluruhan
argumen kasus diformat dengan cara yang paling mirip C. Misalnya,
esensi 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 setiap anggota ditampilkan
secara simbolis. Secara khusus, amati bagaimana anggota st_mode secara hati-hati diterjemahkan menjadi a
bitwise-OR nilai simbolik dan numerik. Perhatikan juga dalam contoh ini bahwa yang pertama
argumen ke lstat adalah input ke panggilan sistem dan argumen kedua adalah output.
Karena argumen keluaran tidak dimodifikasi jika panggilan sistem gagal, argumen mungkin tidak selalu
menjadi dereferensi. Misalnya, mencoba kembali contoh "ls -l" dengan file yang tidak ada
menghasilkan baris berikut:

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. Karakter non-cetak di
string biasanya diwakili oleh kode escape C biasa. 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 dan array sederhana dicetak
menggunakan tanda kurung siku dengan elemen pemisah koma. 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 set adalah
hanya dipisahkan oleh spasi. Inilah shell yang bersiap untuk menjalankan perintah eksternal:

sigprocmask(SIG_BLOCK, [CHLD TTOU], []) = 0

Di sini argumen kedua adalah kumpulan bit dari dua sinyal, SIGCHLD dan SIGTTOU. Dalam beberapa kasus
bit-set sangat penuh sehingga mencetak elemen yang tidak disetel lebih berharga. Karena
kasus, bit-set diawali dengan 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 ringkasannya
keluar program. Di Linux, ini mencoba untuk menunjukkan waktu sistem (waktu CPU yang dihabiskan
berjalan di kernel) terlepas dari waktu jam dinding. Jika -c digunakan dengan -f
or -F (di bawah), hanya total agregat untuk semua proses yang dilacak yang 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 pelacakan.
Ini mengurangi efek yang terlihat dari jejak dengan menjaga tracee sebagai anak langsung
dari proses pemanggilan.

-d Tampilkan beberapa keluaran debug dari jejak sendiri pada kesalahan standar.

-f Lacak proses anak saat mereka dibuat oleh proses yang saat ini dilacak sebagai
hasil dari garpu(2) garpu(2) dan clone(2) panggilan sistem. Perhatikan bahwa -p PID
-f akan melampirkan semua utas PID proses jika multi-utas, tidak hanya
utas dengan thread_id = PID.

-ff Jika -o nama file opsi ini berlaku, setiap jejak proses ditulis ke
nama file.pid di mana pid adalah id proses numerik dari setiap proses. Ini adalah
tidak cocok dengan -c, karena tidak ada penghitungan per-proses yang disimpan.

-F Opsi ini sekarang sudah usang dan memiliki fungsi yang sama dengan -f.

-h Cetak ringkasan bantuan.

-i Cetak penunjuk instruksi pada saat panggilan sistem.

-k Cetak jejak tumpukan eksekusi dari proses yang dilacak setelah setiap panggilan sistem
(eksperimental). Opsi ini hanya tersedia jika jejak dibangun dengan
angin sepoi-sepoi.

-q Menekan pesan tentang melampirkan, melepaskan, dll. Ini terjadi secara otomatis
ketika output diarahkan ke file dan perintah dijalankan secara langsung alih-alih
melampirkan.

-qq Jika diberikan dua kali, tekan pesan tentang status keluar proses.

-r Cetak stempel waktu relatif saat masuk ke setiap panggilan sistem. Ini mencatat
perbedaan waktu antara awal 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 terdepan akan dicetak sebagai jumlah detik sejak epoch.

-T Tampilkan waktu yang dihabiskan dalam panggilan sistem. Ini mencatat perbedaan waktu antara
awal dan akhir setiap panggilan sistem.

-w Ringkaskan perbedaan waktu antara awal dan akhir setiap sistem
panggilan. Standarnya adalah meringkas waktu sistem.

-v Cetak versi panggilan lingkungan, stat, termios, dll. yang tidak disingkat.
Struktur ini sangat umum dalam panggilan sehingga perilaku default ditampilkan
bagian yang masuk akal dari anggota struktur. Gunakan opsi ini untuk mendapatkan semua
rincian berdarah.

-V Cetak nomor versi dari jejak.

-x Cetak semua string non-ASCII dalam format string heksadesimal.

-xx Cetak semua string dalam format string heksadesimal.

-y Jalur cetak yang terkait dengan argumen deskriptor file.

-Y y Cetak ip: pasangan port yang terkait dengan deskriptor file soket.

-a kolom Sejajarkan nilai yang dikembalikan dalam kolom tertentu (kolom default 40).

-b panggilan sistem Jika syscall yang ditentukan tercapai, lepaskan dari proses yang dilacak. Saat ini, hanya
eksekutif syscall 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 peristiwa mana yang akan dilacak atau bagaimana dilacak
mereka. Bentuk ekspresinya adalah:

[kualifikasi=][!]value1[,value2] ...

dimana kualifikasi adalah salah satu jejak, singkatan, bertele-tele, mentah, sinyal, Baca baca, atau menulis
dan nilai adalah simbol atau angka yang bergantung pada kualifikasi. Kualifikasi default adalah
jejak. Menggunakan tanda seru meniadakan kumpulan nilai. Sebagai contoh,
-e Buka berarti secara harfiah -e jejak=Buka yang pada gilirannya berarti hanya melacak Buka
panggilan sistem. Sebaliknya, -e jejak=!Buka berarti melacak setiap panggilan sistem
kecuali Buka. Selain itu, nilai-nilai khusus semua dan tak satupun memiliki yang jelas
arti.

Perhatikan bahwa beberapa shell menggunakan tanda seru untuk ekspansi sejarah bahkan
di dalam argumen yang dikutip. Jika demikian, Anda harus menghindari tanda seru dengan a
garis miring terbalik.

-e jejak=set
Lacak hanya kumpulan panggilan sistem yang ditentukan. NS -c pilihan berguna untuk
menentukan panggilan sistem mana yang mungkin berguna untuk dilacak. Sebagai contoh,
jejak=buka, tutup, baca, tulis berarti hanya melacak keempat panggilan sistem itu. Menjadi
berhati-hatilah saat membuat kesimpulan tentang batas pengguna/kernel jika hanya sebagian
panggilan sistem sedang dipantau. Standarnya adalah jejak=semua.

-e jejak=fillet
Lacak semua panggilan sistem yang menggunakan nama file sebagai argumen. Anda bisa berpikir
ini sebagai singkatan dari -e jejak=Buka,Stat,chmod,batalkan tautan,... yang
berguna untuk melihat file apa yang dirujuk oleh proses. Selanjutnya, menggunakan
singkatan akan memastikan bahwa Anda tidak sengaja lupa untuk menyertakan
panggilan seperti status dalam daftar. Betchya akan melupakan yang itu.

-e jejak=proses
Lacak semua panggilan sistem yang melibatkan manajemen proses. Ini berguna untuk
menonton fork, wait, dan langkah-langkah exec 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. NS
defaultnya adalah singkatan=semua. itu -v pilihan memiliki efek singkatan=tak satupun.

-e bertele-tele=set
Struktur dereferensi untuk kumpulan panggilan sistem yang ditentukan. Standarnya adalah
bertele-tele=semua.

-e mentah=set Cetak argumen mentah yang tidak dikodekan untuk rangkaian panggilan sistem yang ditentukan. Ini
opsi memiliki efek menyebabkan semua argumen dicetak dalam heksadesimal.
Ini sangat berguna jika Anda tidak mempercayai decoding atau Anda perlu mengetahuinya
nilai numerik sebenarnya dari sebuah argumen.

-e sinyal=set
Lacak hanya subset sinyal yang ditentukan. Standarnya adalah sinyal=semua. Forum
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 yang dibaca dari file
deskriptor yang tercantum dalam set yang ditentukan. Misalnya, untuk melihat semua masukan
aktivitas pada deskriptor file 3 dan 5 menggunakan -e Baca baca=3,5. Perhatikan bahwa ini adalah
independen dari 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 file
deskriptor yang tercantum dalam set yang ditentukan. Misalnya, untuk melihat semua keluaran
aktivitas pada deskriptor file 3 dan 5 menggunakan -e menulis=3,5. Perhatikan bahwa ini adalah
independen dari 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
sinyal diblokir; 2: sinyal fatal 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 daripada ke stderr. Menggunakan
nama file.pid if -ff digunakan. Jika argumen dimulai dengan '|' atau dengan '!' kemudian
sisa argumen diperlakukan sebagai perintah dan semua output disalurkan ke
dia. 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 adalah
berguna untuk mengesampingkan heuristik default untuk menebak berapa banyak waktu
dihabiskan hanya untuk mengukur saat sistem pengaturan waktu memanggil menggunakan -c pilihan. Itu
akurasi heuristik dapat diukur dengan mengatur waktu program yang diberikan berjalan tanpa
penelusuran (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 oleh sinyal interupsi keyboard (CTRL-C). jejak
akan merespons dengan melepaskan diri dari proses yang dilacak meninggalkannya (mereka)
untuk terus berlari. beberapa -p opsi dapat digunakan untuk melampirkan banyak
proses. -p sintaks "`pidof PROG`" didukung.

-P path Lacak hanya panggilan sistem yang mengakses jalan. kelipatan -P pilihan dapat digunakan untuk
tentukan 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 penuh.

-S Sortir dengan Urutkan output dari histogram yang dicetak oleh -c pilihan dengan yang ditentukan
kriteria. Nilai hukum adalah waktu, panggilan, nama, dan tidak ada (defaultnya adalah waktu).

-u nama pengguna Jalankan perintah dengan ID pengguna, ID grup, dan grup tambahan dari nama pengguna.
Opsi ini hanya berguna saat dijalankan sebagai root dan mengaktifkan opsi yang benar
eksekusi binari setuid dan/atau setgid. Kecuali opsi ini digunakan setuid
dan program setgid dijalankan tanpa hak istimewa yang efektif.

-E adalah=val Jalankan perintah dengan adalah=val dalam daftar variabel lingkungan.

-E adalah Remove adalah dari daftar variabel lingkungan yang diwarisi sebelum meneruskannya
pada perintah.

DIAGNOSTIK


Ketika Command keluar, jejak keluar dengan status keluar yang sama. Jika Command diakhiri oleh
sinyal, jejak mengakhiri dirinya sendiri dengan sinyal yang sama, sehingga jejak dapat digunakan sebagai
proses pembungkus transparan ke proses induk yang memanggil. Perhatikan bahwa orang tua-anak
hubungan (pemberitahuan penghentian sinyal, nilai getppid(), dll) antara proses yang dilacak dan
induknya tidak diawetkan kecuali -D digunakan.

Ketika menggunakan -p, status keluar dari jejak adalah nol kecuali ada kesalahan tak terduga dalam
melakukan penelusuran.

SETUID INSTALASI


If jejak diinstal setuid ke root maka pengguna yang memanggil akan dapat melampirkan dan
melacak proses yang dimiliki oleh setiap pengguna. Selain itu, program setuid dan setgid akan menjadi
dieksekusi dan dilacak dengan hak efektif yang benar. Karena hanya pengguna yang dipercaya dengan
hak akses root penuh harus diizinkan untuk melakukan hal-hal ini, masuk akal untuk menginstal
jejak sebagai setuid untuk melakukan root ketika pengguna yang dapat menjalankannya dibatasi untuk pengguna tersebut
yang memiliki kepercayaan ini. Misalnya, masuk akal untuk menginstal versi khusus jejak
dengan mode 'rwsr-xr--', pengguna akar dan kelompok jejak, dimana anggota jejak kelompok adalah
pengguna terpercaya. Jika Anda menggunakan fitur ini, harap ingat untuk menginstal non-setuid
versi jejak untuk digunakan lusers biasa.

Gunakan strace online menggunakan layanan onworks.net



Program online Linux & Windows terbaru