Opsi 1 adalah memodifikasi kode sumber aplikasi pemanggil dan menyisipkan tee
ke saluran keluaran untuk mendapatkan salinan keluaran untuk ditinjau pada tahap itu.
Opsi 2 adalah menulis skrip pembungkus di sekitar file yang dapat dieksekusi yang dimaksud. Skrip cepat yang meneruskan stdin dan argumen ke aplikasi sebenarnya, lalu mengarahkan output ke lokasi untuk Anda tinjau dan juga mengeluarkannya kembali dengan cara yang sama seperti aplikasi seharusnya hanya beberapa baris untuk disiapkan. Taruh di tempat khusus dan tambahkan lokasi itu ke depan variabel PATH Anda, lalu jalankan aplikasi Anda.
#!/bin/sh
cat - | /path/to/realapp [email protected] | tee /tmp/debug_output
Anda dapat memperoleh banyak informasi tentang suatu program dengan memanggilnya di bawah strace
. Ini menunjukkan setiap panggilan sistem yang dibuat oleh program, yang kadang-kadang bisa menjadi terlalu banyak informasi, tetapi bisa sangat membantu untuk menemukan apa yang salah.
Pendekatan pertama adalah menjalankan aplikasi besar Anda di bawah strace
. Ini kemungkinan akan menghasilkan banyak output dan memperlambat aplikasi Anda.
strace -s9999 -efile,process -f -o bigapp.strace bigapp
Jika aplikasi besar bersifat interaktif, Anda dapat memilih untuk memulainya, dan menyambungkan strace ke aplikasi tersebut setelah Anda siap memicu penghitungan. Catat ID proses aplikasi, misalnya 12345, dan jalankan
strace -s9999 -efile,process -f -o bigapp-calculations.strace -p12345
Jika cukup mengamati executable eksternal itu, maka seperti jawaban lain yang telah disarankan, ganti executable itu dengan skrip pembungkus. Anda dapat memindahkan file yang dapat dieksekusi ke nama yang berbeda dan meletakkan skrip pembungkus di tempatnya, atau meletakkan skrip pembungkus di depan file yang dapat dieksekusi biasa di PATH
, atau konfigurasikan aplikasi untuk memanggil skrip pembungkus Anda alih-alih yang dapat dieksekusi biasa, apa pun yang nyaman. Buat skrip pembungkus itu
#!/bin/sh
exec strace -s9999 -efile -o auxapp-$$.strace /path/to/original/executable "[email protected]"
Penjelasan parameter strace yang digunakan:
-e
memilih panggilan sistem untuk dilacak. Anda dapat menentukan panggilan sistem berdasarkan nama atau menggunakan beberapa kategori sepertifile
(open
,close
,read
,write
, …) danprocess
(fork
,execve
, …).-f
membuat strace mengikuti garpu, yaitu melacak subproses serta proses asli.-o
memilih nama file yang berisi jejak.$$
adalah konstruksi shell yang mewakili ID proses dari proses shell (karena penggunaanexec
dalam skrip pembungkus terakhir, itu juga akan menjadi ID proses aplikasi tambahan).-s9999
membuatnya menampilkan banyak byte untukread
danwrite
dan panggilan lainnya.
Daripada mengubah jalur Anda, Anda harus memindahkan biner yang Anda minati dari "binary" ke "binary.orig" lalu menggantinya dengan skrip. Anda mengatakan bahwa Anda tertarik dengan argumennya, jadi Anda juga ingin menuliskannya ke file. Anda mungkin juga akan tertarik dengan keluaran dari perintah "env". Itu membuang semua variabel lingkungan yang sedang aktif. Variabel lingkungan sering digunakan oleh satu program untuk memengaruhi perilaku program lain yang dipanggilnya.