Saya memiliki executable Linux tertentu yang dipanggil dari aplikasi yang lebih besar untuk melakukan beberapa perhitungan. Saya ingin mengubah cara penghitungan dilakukan, untuk itu saya harus terlebih dahulu memahami bagaimana executable dipanggil dan dengan cara apa parameter dan data ditransfer.
Jadi, saya ingin memantau parameter baris perintah, stdin dan stdout jika executable ini dipanggil. Operasi normal dari executable tidak boleh diganggu.
Apakah ada cara mudah untuk melakukannya?
Pembaruan:
Saya mencoba ide placeholder skrip Shell untuk mengambil semua data menggunakan skrip berikut:
#!/bin/bash
export LOGFILE=/tmp/logname
echo `env` > $LOGFILE-env
echo "[email protected]" >> $LOGFILE-arguments
tee -a $LOGFILE-stdin | /path/to/real/executable 2>&1 | tee -a $LOGFILE-stdout
Ini berfungsi dengan baik untuk input pengujian, tetapi hanya hang jika dipanggil nyata. Mungkin ada lebih banyak yang terjadi daripada yang saya duga.
Jawaban yang Diterima:
Opsi 1 adalah memodifikasi kode sumber aplikasi panggilan dan memasukkan tee
ke dalam pipa keluaran untuk mendapatkan salinan keluaran untuk ditinjau pada tahap itu.
Opsi 2 adalah menulis skrip pembungkus di sekitar executable yang dimaksud. Skrip cepat yang meneruskan stdin dan argumen ke aplikasi nyata, lalu tee adalah output ke lokasi untuk Anda tinjau dan juga mengeluarkannya kembali dengan cara yang sama seperti aplikasi seharusnya hanya beberapa baris untuk disiapkan. Letakkan 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