Apakah ada yang setara dengan apa -T
dan -U
opsi truss
utilitas Solaris tidak di Linux.
Itu adalah untuk menentukan panggilan sistem ( -T
) atau fungsi perpustakaan ( -U
) yang ketika dipanggil oleh aplikasi yang dilacak akan menyebabkannya berhenti.
Atau, dikatakan sebaliknya, saya ingin proses apa pun yang dimulai oleh aplikasi yang dilacak dihentikan (seolah-olah dibunuh oleh SIGSTOP) segera setelah itu membuat panggilan sistem yang diberikan atau panggilan fungsi perpustakaan bersama yang diberikan.
strace
dan ltrace
di Linux menyediakan banyak fitur dari Solaris truss
, tetapi mereka tampaknya tidak melakukan itu.
Contohnya:
truss -f -T open cmd
Akan seperti strace -f cmd
kecuali bahwa jika proses mengeksekusi cmd
atau keturunannya melakukan open
panggilan sistem apa pun , itu akan segera dihentikan (dan saya dapat melanjutkannya nanti sesuai keinginan saya)
Dalam beberapa kasus, saya bisa menggunakan gdb
itu catch syscall
, tetapi saya sedang mencari solusi yang dapat dengan mudah mengikuti garpu dan terus melakukannya untuk semua proses bercabang dan terus melakukannya bahkan setelah execve
itu.
Saya sepertinya mengingat beberapa utilitas yang memberikan fungsionalitas yang sama, bahkan satu (atau opsi untuk utilitas yang sama) untuk aplikasi satu langkah di antara beberapa kejadian beberapa syscall jarak jauh seperti itu, tetapi memori saya gagal, saya bahkan tidak bisa memastikan itu di Linux.
follow-exec-mode
), saya bereksperimen dengan itu. Tidak sepenuhnya menjawab pertanyaan, tetapi mungkin cukup baik untuk apa yang saya butuhkan.truss
manual Solaris .Jawaban:
Sejauh pengetahuan saya ini tidak dapat dilakukan dengan
strace
,ptrace
fungsi yang digunakan secara internal tidakSIGSTOP
atauSIGINT
pada panggilan.EDIT:
Saya memasukkan solusi sederhana ini ke dalam ministrace , jadi tidak diperlukan pengkodean.
Solusi yang saya usulkan, jika tidak semua fungsi dari strace diperlukan, akan memodifikasi ministrace - yang saya temukan di sini Tulis sendiri strace dalam 70 baris kode .
Dalam program satu tembakan Anda dapat menambahkan dua baris sebelum kode berikut:
Kode palsu:
Saya belum menguji semua ini, langkah-langkah terakhir ini diserahkan kepada Anda.
sumber
Systemtap harus dapat melakukan apa yang Anda cari, itu panduan yang bagus untuk itu:
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/SystemTap_Beginners_Guide/
sumber