Itu strace
utilitas menunjukkan panggilan sistem kepada Anda. Sebagian besar program yang dikompilasi di Linux akhirnya terhubung dengan pustaka C standar, disebut sebagai "glibc" meskipun nama file pustaka yang sebenarnya adalah libc.so.6
. Bahasa C "panggilan sistem" seperti "terbuka", "baca", "tulis" sebenarnya adalah fungsi pembungkus untuk panggilan sistem aktual yang dijalankan oleh pustaka glibc. Terkadang pembungkus menyertakan jumlah kode yang mengejutkan yang biasanya tidak Anda pikirkan. Terkadang programmer menggunakan pustaka dengan fungsi yang membuat beberapa panggilan glibc yang melakukan beberapa panggilan sistem. Selanjutnya, jika Anda melihat "baca" tertentu di strace
output, Anda tidak memiliki cara untuk menghubungkannya dengan panggilan "baca" tertentu atau fungsi perpustakaan lain dalam kode sumber. Hasil dari ini adalah bahwa tidak ada cara umum untuk berkorelasi strace
output dengan baris kode tertentu dalam file sumber.
Saya berasumsi bahwa ketika Anda menyatakan bahwa Anda memiliki kode sumber yang Anda maksudkan, Anda juga dapat mengkompilasinya menjadi program yang dapat dijalankan yang berfungsi. Jika ini memang masalahnya, maka taruhan terbaik Anda adalah dengan memasukkan kode printf
s diikuti dengan fflush(stdout)
dan kemudian jalankan program di bawah strace
. Untuk printf
s Anda dapat mencoba sesuatu seperti
printf(__FILE__ ", %s:%d Entered\n", __FUNCTION__, __LINE__), fflush(stdout);
pada awal setiap fungsi C. Anda dapat mendefinisikan baris di atas sebagai preprocessor marcro yang secara kondisional didefinisikan sebagai di atas atau tidak sama sekali, tergantung pada makro lain seperti DEBUG
, sehingga Anda dapat meninggalkan makro ini di basis kode Anda dan kompilasi kode dengan atau tanpa DEBUG
didefinisikan.
Anda akan melihat printf
"tulis" panggilan sistem dan outputnya diselingi di antara panggilan sistem yang membaca penekanan tombol. Ini harus memungkinkan Anda membidik fungsi kode sumber yang membaca input tty. Mungkin membutuhkan usaha yang gigih.