Ini adalah command latrace 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
latrace - frontend LD_AUDIT 2.4+ libc
RINGKASAN
latrace [-snltfvhiBdISbcCyYLpoaNADVTFERq] perintah [arg ... ]
DESKRIPSI
Pelacak latrace dapat menjalankan perintah dan menampilkan panggilan perpustakaan dinamisnya menggunakan a
Fitur libc LD_AUDIT, tersedia mulai dari libc versi 2.4 dan seterusnya. Ia juga mampu untuk
mengukur dan menampilkan berbagai statistik panggilan dinamis. Lihat bagian yang disebut
“DISKUSI” untuk lebih jelasnya.
Jika file header dengan deklarasi fungsi disediakan, latrace akan ditampilkan
argumen fungsi. Sintaks file file header mirip dengan bahasa C, dengan
beberapa pengecualian Lihat bagian yang disebut “HEADERS” untuk lebih jelasnya.
Latrace secara default beroperasi sepenuhnya di dalam program yang dilacak. Namun "pipa" lain
mode" tersedia untuk memindahkan pekerjaan utama ke pelacak - biner latrace. Lihat
bagian yang disebut "mode PIPA" untuk lebih jelasnya.
Penggunaan latrace mirip dengan jejak(1) dan jejak(1).
PILIHAN
-l, --libs lib1[,lib2,...]
audit dari dan ke lib1, lib2 ...
-t, --libs-ke lib1[,lib2,...]
audit ke lib1, lib2 ...
-f, --libs-dari lib1[,lib2,...]
audit dari lib1, lib2 ...
-s, --sim sim1[,sim2,...]
audit simbol sym1, sym2 ...
-n, --sym-menghilangkan sym1[,sym2,...]
hilangkan simbol sym1, sym2 ...
-L, --lib-subst s1[,s2,...]
objsearch antarmuka LD_AUDIT (Lihat bagian yang disebut "OBJSEARCH")
-c, --hitungan
menampilkan statistik jumlah simbol - menyiratkan mode pipa (lihat bagian yang disebut "PIPE"
mode") output tanpa simbol ditampilkan
-C, --sort-menghitung stat
menyiratkan -c, plus urutkan statistik berdasarkan stat dengan nilai berikut:
waktu, per, panggilan, ucall, lib, sym (default adalah panggilan)
-p, --pipa
gunakan proses pipa ke latrace untuk mengirim data audit (lihat bagian yang disebut "mode PIPA")
-N, --konf
config file (lihat bagian yang disebut "CONFIG")
-A, --aktifkan-args
aktifkan output argumen (definisi dari /etc/latrace.conf)
-D, --detail-args
tampilkan argumen struct secara lebih detail
-a, --args berkas
tentukan file definisi argumen, menyiratkan -A (tanpa file definisi default dari
kursus)
-y, --angka ukuran bingkai
framesize untuk menyimpan tumpukan sebelum pltexit (default 100)
-Y, --no-framesize-periksa
nonaktifkan pemeriksaan ukuran bingkai
-F, --tidak-ikuti-garpu
jangan ikuti panggilan garpu (anak-anak). Ini hanya menekan keluaran latrace dari yang baru
anak-anak. Sifatnya LD_AUDIT fitur mencegah untuk menonaktifkannya sepenuhnya.
-E, --tidak-ikuti-eksekutif
jangan ikuti panggilan exec
-S, --cap waktu
tampilkan stempel waktu untuk setiap simbol
-b, --flow-bawah sym1[,sym2,...]
tampilan aliran untuk sym1, sym2 ...
-Saya, --no-indent-sym
jangan lakukan simbol indentasi berdasarkan kedalaman tumpukannya
-i, --indent-sym indent_size
spesifikasi ukuran indentasi di indent_size
-B, --kawat gigi
selalu tampilkan { } untuk sekitar tubuh simbol
-d, --demangle
C++ demangle simbol pada output
-T, --sembunyikan-tid
jangan tampilkan id utas
-o, --keluaran berkas
simpan output ke file
-R, --ctl-config
fitur konfigurasi terkontrol
-q, --nonaktifkan
jalankan dengan audit yang dinonaktifkan
-v, --bertele-tele
keluaran verbose
-V, --versi
versi tampilan
-h, --bantuan
menampilkan bantuan
CONTOH
· Cara paling sederhana untuk menjalankan latrace adalah seperti ini:
kucing latrace
· Untuk melihat nilai argumen yang ditentukan oleh file konfigurasi default, jalankan:
latrace -Kucing
· Sama seperti di atas tetapi menggunakan mode pipa untuk mencetak semua simbol akhir:
latrace -Ap kucing
· Untuk melihat nilai argumen yang ditentukan oleh file konfigurasi tertentu, jalankan:
latrace -a latrace.conf kucing
· Untuk mendapatkan output hanya untuk simbol tertentu (misalnya membaca dan menulis) jalankan:
latrace -A -s baca,tulis cat
· Untuk mendapatkan aliran di bawah simbol yang ditentukan (mis. sysconf) jalankan:
latrace -b sysconf membunuh
· Untuk mendapatkan keluaran hanya untuk pustaka tertentu (mis. libproc), jalankan:
latrace -Al libproc w
· Untuk menjalankan statistik simbol:
latrace -c ls
· Untuk mendapatkan statistik simbol yang diurutkan berdasarkan waktu:
latrace -C waktu ls
· Untuk mendapatkan output yang disimpan ke file teks, jalankan:
latrace -o keluaran.latrace ls
· Untuk mengubah ketergantungan libkrava1.so ke libkrava2.so jalankan salah satu dari ini:
latrace -L krava1%krava2 ex
latrace -L krava1~libkrava2.so ex
latrace -L libkrava1.so=libkrava2.so mis
PEMBAHASAN
NAMA TARIF
Untuk opsi "-l -t -f -s -n -B" itu * simbol dapat digunakan untuk beralih ke substring
Cari. Jika tidak ditentukan, pencarian yang tepat untuk nama dilakukan.
contoh:
-s "*krava" memeriksa simbol dengan substring "krava".
-s "krava" hanya memeriksa simbol "krava"
LD_AUDIT
Ini hanya deskripsi singkat dan tidak jelas tentang LD_AUDIT fitur. Untuk informasi lebih lanjut
melihat ke rtld-audit(7) dilakukan oleh Petr Baudis atau pelajari kode sumber glibc/latrace. Sangat
penjelasan singkat berikut.
Fitur audit tautan dinamis libc memungkinkan untuk melacak/mengaudit simbol/pustaka program.
Fitur ini diaktifkan oleh LD_AUDIT variabel lingkungan. Variabel ini harus mengandung
jalur ke perpustakaan bersama audit. Pustaka audit ini harus mengikuti antarmuka tertentu.
Fungsi interface kemudian akan dipanggil oleh dynamic linker dengan tepat.
Pustaka audit perlu mengekspor simbol berikut ("la_PLTENTER" dan "la_PLTEXIT"
nama tergantung arsitektur).
"la_aktivitas"
"la_objsearch"
"la_objopen"
"la_preinit"
"la_symbind32"
"la_symbind64"
"la_PLTENTER"
"la_PLTEXIT"
"la_objclose"
Adapun paket latrace, perpustakaan bersama audit disebut libltaudit.so.
PENCARIAN
pencarian obj LD_AUDIT antarmuka menyediakan sarana untuk mengubah objek bersama program yang dilacak
nama/lokasi. Argumen opsi -L harus memiliki bentuk berikut:
-L s1[,s2,...] dimana sN adalah src [=%~] dst
The src adalah pola/nama sumber dan dst adalah nama/pola tujuan.
= Membandingkan src dengan perpustakaan
nama. Jika cocok, ganti
nama perpustakaan dengan dst.
nama perpustakaan - /lib/krav1.so
src - /lib/krav1.so
dst - /lib/krava2.so
nama perpustakaan akhir - /lib/krava2.so
% Mencari src dalam nama perpustakaan. Jika
ditemukan, ganti src dengan bagian dst.
nama perpustakaan - /lib/krav1.so
src - krav1
dst - krava2
nama perpustakaan akhir - /lib/krava2.so
~ Mencari src di nama perpustakaan. Jika
ditemukan, ganti nama perpustakaan dengan dst.
nama perpustakaan - /lib/krav1.so
src - krav1
dst - /lib/krava2.so
nama perpustakaan akhir - /lib/krava2.so
PIPA mode
The kisi-kisi dapat bekerja dalam dua mode. Yang pertama asli apakah outputnya langsung masuk?
proses program yang dilacak. Yang lain, pipa mode menggunakan mekanisme fifo IPC untuk mengirim
data dari proses telusur ke proses latrace. Proses latrace kemudian
bertanggung jawab atas keluarannya. Menggunakan mode pipa, Anda kehilangan standar program yang dilacak
konteks keluaran dengan simbol tercetak.
Dengan menggunakan pipa mode, latrace tidak tergantung pada program jejak
penggunaan/manipulasi deskriptor keluaran standar. Juga statistik simbol penting
-C, -C Pilihan gunakan pipa mode untuk mentransfer informasi simbol ke biner latrace, dan
biner latrace melakukan penghitungan di akhir.
KONFIG
Latrace memberikan kemungkinan untuk mengaktifkan/menonaktifkan beberapa opsi dengan cara
berkas konfigurasi. Beberapa opsi ditautkan ke argumen baris perintah beberapa dari
mereka tidak. Ketika latrace dimulai, file konfigurasi global dibaca. File ini adalah
biasanya ditempatkan di sini:
/etc/latrace.d/latrace.conf
Setelah nilai default dibaca dari file ini, pengguna dapat membebani salah satu dari mereka dengan baris perintah
opsi atau dengan menambahkan file konfigurasi lain melalui -N, --konf .
Sintaks file konfigurasi kira-kira:
TERMASUK
PILIHAN {
OPSI1 = NILAI
OPSI2 = YA|TIDAK
...
OPSIN = NILAI
}
# komentar
konfigurasi fillet Pilihan
KEPALA = FILE
-a, --argumen
INDENT_SYM = NILAI
-i, --indentasi-sim
PIPA = BOOL
-p, --pipa
URUTAN WAKTU = BOOL
-S, --cap waktu
UKURAN BINGKAI = NILAI
-y, --ukuran bingkai
FRAMESIZE_CHECK = BOOL
-Y, --no-framesize-periksa
HIDE_TID = BOOL
-T, --sembunyikan-tid
IKUTI_FORK = BOOL
-F, --tidak-ikuti-garpu
IKUTI_EXEC = BOOL
-E, --tidak-ikuti-eksekutif
DEMANGLE = BOOL
-d, --demangle
Kawat Gigi = BOOL
-B, --kawat gigi
AKTIFKAN_ARGS = BOOL
-A, --aktifkan-args
DETAIL_ARGS = BOOL
-D, --detail-args
OUTPUT_TTY = FILE
· menyimpan keluaran terminal tracee ke file
LIBS = LIB1[,LIB2,...]
-l, --libs
LIBS_TO = LIB1[,LIB2,...]
-t, --libs-ke
LIBS_FROM = LIB1[,LIB2,...]
-f, --libs-dari
SIM = SIM1[,SYM2,...]
-s, --sim
SYM_OMIT = SIM1[,SYM2,...]
-n, --sym-hilangkan
SYM_BAWAH = SYM1[,SYM2,...]
-b, --aliran-bawah
SYM_NOEXIT = SIM1[,SYM2,...]
· simbol yang tidak menjalankan panggilan balik keluar (plt_exit)
ARGS_STRING_POINTER_LENGTH = BOOL
· argumen fungsi - menampilkan panjang string dan nilai pointer
KEPALA
File header latrace memungkinkan pengguna untuk mendefinisikan simbol sebagai fungsi C klasik dengan
argumen. Nama argumen akan ditampilkan bersama dengan nilai sebagai output latrace.
Semakin banyak argumen yang didefinisikan, semakin banyak penalti kinerja dan memori yang seharusnya
diharapkan.
Paket dikirimkan dengan beberapa file header yang telah ditentukan sebelumnya untuk yang paling umum digunakan
fungsi. Daftar file header glibc yang digunakan berikut (daftar sebagian besar mengikuti ltrace
daftar file header, dan penulis bersedia memperbaruinya sesuai kebutuhan)
ctype.h dirent.h dlfcn.h fcntl.h getopt.h inet.h ioctl.h
libintl.h libio.h lokal.h misch.h mman.h ncurses.h netdb.h
pthread.h pwd.h sumber daya.h sinyal.h soket.h stat.h stdio.h
stdlib.h string.h syslog.h term.h termios.h waktu.h typedefs.h
unistd.h utmp.h tunggu.h
File header latrace biasanya disimpan di bawah direktori:
/etc/latrace.d/headers/
Pengguna dapat menentukan file header tunggal menggunakan opsi baris perintah atau file konfigurasi. Ini
file kemudian dapat menyertakan header lain yang diperlukan. Seperti yang telah disebutkan, file konfigurasi latrace
sintaks ringan mengikuti sintaks bahasa C. Bagian berikut menjelaskan konfigurasi latrace
bahasa berkas.
· Beberapa POD jenis (data lama biasa), dikodekan dalam latrace. Ukuran argumen itu
ditentukan oleh ukuran makro. Daftar berikut.
membatalkan
karakter u_char
pendek u_short
ke dalam u_int
panjang u_long
llong u_llong # (panjang panjang)
mengambang ganda
· Itu mengetik kata kunci memungkinkan untuk menentukan tipe baru berdasarkan yang sudah ada (POD
atau diketik). Meskipun ada cara untuk beberapa lapisan penunjuk dalam tipe
definisi (*), hanya satu yang diambil.
typedef base_type tipe_baru;
typedef base_type * tipe_baru;
typedef base_type ** tipe_baru;
· komentar ikuti gaya C /\* \*/ logika.
/\* komentar \*/
· Itu memasukkan kata kunci memungkinkan untuk memasukkan file konfigurasi lain.
#sertakan "nama file"
· Itu struktur kata kunci memungkinkan untuk mendefinisikan struktur. Sintaksnya mengikuti tata bahasa berikut:
aturan.
MULAI:: NAMA struct { STRUCT_DEF };
STRUCT_DEF:: DEF | KOSONG
DEF:: NAMA NAMA |
NAMA '*' NAMA |
struct NAMA NAMA |
struct NAMA '*' NAMA
NAMA:: [-0-9a-zA-Z_]+
· Itu fungsi definisi mengikuti sintaks berikut (DEF dan NAME sama dengan for
definisi struktur).
MULAI:: DEF '(' ARGS ')' ';'
ARGS:: ARGS ',' DEF | DEF | KOSONG
· Itu enum definisi mengikuti sintaks berikut (NAME sama dengan definisi struct).
MULAI:: NAMA ENUM '{' ENUM_DEF '}' ';'
ENUM_DEF:: ENUM_DEF ',' ENUM_ELEM | ENUM_ELEM
ENUM_ELEM:: NAME '=' NAMA | NAMA
· Contoh file konfigurasi latrace sederhana.
---[ potong disini ]-----------------------------
enum krava {
krava1 = 1,
krava2,
krava3 = 100
};
#sertakan "krav.conf"
typedef u_int pid_t;
struct ex_st {
pid_t hal;
ke dalam tidak;
nama karakter;
};
int f1(pid_t p, struct ex_st *k);
int f2(nama karakter*, struct ex_st k, int k = krava);
struct ex_st* f3(pid_t *p, struct ex_st k);
---[ potong disini ]-----------------------------
· Array belum didukung, jadi tidak ada cara untuk mendefinisikan beberapa struktur. Untuk seperti itu
struktur menggunakan tipe void* di mana argumen struktur dilewatkan dengan pointer. Jika
dilewatkan oleh nilai, sejauh ini tidak ada solusi (selain mengisi struktur
body dengan tipe POD hingga panjang sebenarnya dari struktur :).
· Daftar argumen variabel (va_list/...) belum didukung. definisi fungsi
perlu berhenti sebelum argumen daftar argumen variabel pertama.
PORTS
Latrace harus bekerja pada sistem glibc apa pun dengan dukungan LD_AUDIT. Namun argumen
detailnya spesifik arsitektur dan memerlukan dukungan khusus di dalam latrace itu sendiri.
Penulis bersedia mem-port latrace ke arsitektur apa pun, selama dia mendapat akses ke
sistem yang sesuai. Port yang berfungsi saat ini adalah:
x86 ok
x86_64 ok
lengan ok
Gunakan latrace online menggunakan layanan onworks.net
