GNU/Linux >> Belajar Linux >  >> Linux

Opsi baris perintah GCC yang tidak umum tetapi berguna

Alat perangkat lunak biasanya menawarkan banyak fitur, tetapi - karena sebagian besar dari Anda akan setuju - tidak semua fitur mereka digunakan oleh semua orang. Secara umum, tidak ada yang salah dalam hal itu, karena setiap pengguna memiliki kebutuhan mereka sendiri dan mereka hanya menggunakan alat di dalam lingkup itu. Namun, selalu baik untuk terus menjelajahi alat yang Anda gunakan karena Anda tidak pernah tahu kapan salah satu fiturnya mungkin berguna, sehingga menghemat waktu Anda yang berharga dalam prosesnya.

Contoh kasus:kompiler. Kompiler bahasa pemrograman yang baik selalu menawarkan banyak pilihan, tetapi pengguna umumnya hanya mengetahui dan menggunakan set terbatas. Khususnya, jika Anda adalah pengembang bahasa C dan menggunakan Linux sebagai platform pengembangan Anda, kemungkinan besar Anda akan menggunakan kompiler gcc, yang menawarkan daftar opsi baris perintah tanpa akhir.

Tahukah Anda bahwa jika Anda mau, Anda dapat meminta gcc untuk menyimpan output pada setiap tahap proses kompilasi? Apakah Anda tahu -Dinding opsi yang Anda gunakan untuk menghasilkan peringatan tidak mencakup beberapa peringatan khusus? Ada banyak opsi gcc baris perintah yang tidak umum digunakan, tetapi bisa sangat berguna dalam skenario tertentu, misalnya, saat men-debug kode.

Jadi, dalam artikel ini, kami akan membahas beberapa opsi tersebut, menawarkan semua detail yang diperlukan, dan menjelaskannya melalui contoh yang mudah dipahami jika diperlukan.

Tetapi sebelum kita melanjutkan, harap diingat bahwa semua contoh, perintah, dan instruksi yang disebutkan dalam tutorial ini telah diuji pada Ubuntu 16.04 LTS, dan versi gcc yang kami gunakan adalah 5.4.0.

 

Lihat output antara selama setiap tahap kompilasi

Tahukah Anda, secara umum, ada total empat tahap yang dilalui kode C Anda saat Anda mengompilasinya menggunakan kompiler gcc? Ini adalah preprocessing, kompilasi, perakitan, dan menghubungkan. Setelah setiap tahap, gcc menghasilkan file keluaran sementara yang diserahkan ke tahap berikutnya. Sekarang, ini semua adalah file sementara yang dihasilkan, dan karenanya kami tidak dapat melihatnya - yang kami lihat hanyalah bahwa kami telah mengeluarkan perintah kompilasi dan menghasilkan biner/executable yang dapat kami jalankan.

Tapi misalkan, jika saat debugging, ada persyaratan untuk melihat bagaimana kode terlihat, katakanlah, tahap preprocessing. Lalu, apa yang akan Anda lakukan? Nah, hal baiknya adalah bahwa kompiler gcc menawarkan opsi baris perintah yang dapat Anda gunakan dalam perintah kompilasi standar Anda dan Anda akan mendapatkan file perantara yang akan dihapus oleh kompiler jika tidak. Opsi yang sedang kita bicarakan adalah -save-temps .

Inilah yang dikatakan halaman manual gcc tentang opsi ini:

           Store the usual "temporary" intermediate files permanently; place
           them in the current directory and name them based on the source
           file.  Thus, compiling foo.c with -c -save-temps produces files
           foo.i and foo.s, as well as foo.o.  This creates a preprocessed
           foo.i output file even though the compiler now normally uses an
           integrated preprocessor.

           When used in combination with the -x command-line option,
           -save-temps is sensible enough to avoid over writing an input
           source file with the same extension as an intermediate file.  The
           corresponding intermediate file may be obtained by renaming the
           source file before using -save-temps.

Berikut adalah contoh perintah yang akan memberi Anda gambaran tentang bagaimana Anda dapat menggunakan opsi ini:

gcc -Wall -save-temps test.c -o test-exec

Dan beginilah cara saya memverifikasi bahwa semua file perantara memang diproduksi setelah perintah yang disebutkan di atas dijalankan:

Jadi seperti yang Anda lihat pada tangkapan layar di atas, test.i , test.s , dan test.o file diproduksi oleh -save-temps pilihan. File-file ini masing-masing sesuai dengan tahap pra-pemrosesan, kompilasi, dan penautan.

Siapkan debugging kode dan pembuatan profil

Ada alat khusus yang memungkinkan Anda men-debug dan membuat profil kode sumber Anda. Misalnya, gdb digunakan untuk tujuan debug, sedangkan gprof adalah alat populer untuk tujuan pembuatan profil. Tapi tahukah Anda ada opsi baris perintah khusus yang ditawarkan gcc untuk membuat debug kode Anda serta pembuatan profil siap?

Mari kita mulai dengan debugging. Agar dapat menggunakan gdb untuk debugging kode, Anda harus mengompilasi kode Anda menggunakan -g opsi baris perintah menyediakan kompiler gcc. Opsi ini pada dasarnya memungkinkan gcc untuk menghasilkan informasi debug yang diperlukan oleh gdb agar berhasil men-debug program Anda.

Jika Anda berencana untuk menggunakan opsi ini, Anda disarankan untuk membaca detail yang ditawarkan halaman manual gcc pada opsi ini - beberapa di antaranya terbukti penting dalam beberapa kasus. Sebagai contoh, berikut adalah kutipan yang diambil dari halaman manual:

           GCC allows you to use -g with -O.  The shortcuts taken by optimized
           code may occasionally produce surprising results: some variables
           you declared may not exist at all; flow of control may briefly move
           where you did not expect it; some statements may not be executed
           because they compute constant results or their values are already
           at hand; some statements may execute in different places because
           they have been moved out of loops.

           Nevertheless it proves possible to debug optimized output.  This
           makes it reasonable to use the optimizer for programs that might
           have bugs.

Tidak hanya gdb, kompilasi kode Anda menggunakan -g Opsi ini juga membuka kemungkinan penggunaan alat memcheck Valgrind secara maksimal. Bagi yang belum tahu, memcheck digunakan oleh programmer untuk memeriksa kebocoran memori (jika ada) dalam kode mereka. Anda dapat mempelajari lebih lanjut tentang alat ini di sini.

Selanjutnya, untuk dapat menggunakan gprof untuk pembuatan profil kode, Anda harus mengkompilasi kode Anda menggunakan -pg opsi baris perintah. Hal ini memungkinkan gcc untuk menghasilkan kode tambahan untuk menulis informasi profil, yang diperlukan oleh gprof untuk analisis kode. "Anda harus menggunakan opsi ini saat mengompilasi file sumber yang Anda inginkan datanya, dan Anda juga harus menggunakannya saat menautkan," kata halaman manual gcc. Untuk mempelajari lebih lanjut tentang cara melakukan pembuatan profil kode menggunakan gprof, buka tutorial khusus ini di situs web kami.

Catatan :Penggunaan keduanya -g dan -pg opsinya mirip dengan cara -save-temps opsi digunakan di bagian sebelumnya.

Kesimpulan

Kecuali Anda seorang gcc pro, saya yakin Anda mempelajari sesuatu yang baru dengan artikel ini. Cobalah opsi ini, dan lihat cara kerjanya. Sementara itu, tunggu bagian selanjutnya dalam seri tutorial ini di mana kita akan membahas lebih banyak opsi baris perintah gcc yang menarik dan berguna.


Linux
  1. Opsi Su – Menjalankan Perintah Sebagai Pengguna Lain?

  2. 10 Contoh Perintah Lengkap Bash_Completion Linux yang Berguna (Penyelesaian Baris Perintah Bash pada Steroid)

  3. Bagaimana cara menentukan opsi baris perintah mana yang diteruskan gcc ke ld secara default?

  1. Opsi ps yang berguna

  2. Jelaskan Pilihan Perintah Readlink?

  3. Clonezilla dari Baris Perintah

  1. 15 Opsi Baris Perintah Kompilator GCC yang Paling Sering Digunakan

  2. Opsi Perintah grub-install

  3. dpkg-konfigurasi ulang Opsi Perintah