Ini adalah perintah alpha-linux-gnu-gcov-5 yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS
PROGRAM:
NAMA
gcov - alat pengujian cakupan
RINGKASAN
gcov [-v|--Versi: kapan] [-h|--membantu]
[-a|--semua-blok]
[-b|--cabang-probabilitas]
[-c|--jumlah cabang]
[-d|--tampilan-kemajuan]
[-f|--fungsi-ringkasan]
[-i|--format-menengah]
[-l|--nama-file-panjang]
[-m|--nama-nama yang dirusak]
[-n|--tidak ada keluaran]
[-o|--objek-direktori direktori|file]
[-p|--melestarikan-jalur]
[-r|--relatif-saja]
[-s|--sumber-awalan direktori]
[-u|--cabang-tanpa syarat]
arsip
DESKRIPSI
gcov adalah program cakupan tes. Gunakan bersama GCC untuk menganalisis program Anda untuk
membantu membuat kode yang lebih efisien dan berjalan lebih cepat dan untuk menemukan bagian yang belum teruji dari . Anda
program. Anda dapat gunakan gcov sebagai alat pembuatan profil untuk membantu menemukan di mana pengoptimalan Anda
upaya terbaik akan memengaruhi kode Anda. Anda juga bisa menggunakan gcov bersama dengan profil lainnya
alat, gprof, untuk menilai bagian mana dari kode Anda yang menggunakan waktu komputasi paling banyak.
Alat profil membantu Anda menganalisis kinerja kode Anda. Menggunakan profiler seperti gcov
or gprof, Anda dapat mengetahui beberapa statistik kinerja dasar, seperti:
* seberapa sering setiap baris kode dieksekusi
* baris kode apa yang sebenarnya dieksekusi
* berapa banyak waktu komputasi yang digunakan setiap bagian kode
Setelah Anda mengetahui hal-hal ini tentang cara kerja kode Anda saat dikompilasi, Anda dapat melihat masing-masing
modul untuk melihat modul mana yang harus dioptimalkan. gcov membantu Anda menentukan tempat bekerja
pada optimasi.
Pengembang perangkat lunak juga menggunakan pengujian cakupan bersamaan dengan testsuite, untuk memastikan
perangkat lunak sebenarnya cukup baik untuk rilis. Testsuites dapat memverifikasi bahwa suatu program
bekerja seperti yang diharapkan; program cakupan menguji untuk melihat seberapa banyak program dijalankan oleh
ruang ujian. Pengembang kemudian dapat menentukan jenis kasus uji apa yang perlu ditambahkan
testsuites untuk membuat pengujian yang lebih baik dan produk akhir yang lebih baik.
Anda harus mengkompilasi kode Anda tanpa optimasi jika Anda berencana untuk menggunakan gcov karena
pengoptimalan, dengan menggabungkan beberapa baris kode menjadi satu fungsi, mungkin tidak memberi Anda sebanyak itu
informasi yang Anda butuhkan untuk mencari `hot spot' di mana kode menggunakan banyak
waktu komputer. Begitu juga karena gcov mengumpulkan statistik per baris (paling rendah
resolusi), ini bekerja paling baik dengan gaya pemrograman yang hanya menempatkan satu pernyataan pada masing-masing
garis. Jika Anda menggunakan makro rumit yang diperluas ke loop atau ke struktur kontrol lainnya,
statistiknya kurang membantu --- mereka hanya melaporkan di jalur tempat panggilan makro
muncul. Jika makro kompleks Anda berperilaku seperti fungsi, Anda dapat menggantinya dengan inline
berfungsi untuk menyelesaikan masalah ini.
gcov membuat file log bernama file sumber.gcov yang menunjukkan berapa kali setiap baris
file sumber file sumber.c telah dieksekusi. Anda dapat menggunakan file log ini bersama dengan gprof untuk
membantu menyempurnakan kinerja program Anda. gprof memberikan informasi waktu Anda
dapat digunakan bersama dengan informasi yang Anda dapatkan dari gcov.
gcov hanya berfungsi pada kode yang dikompilasi dengan GCC. Ini tidak kompatibel dengan pembuatan profil lainnya
atau mekanisme cakupan tes.
PILIHAN
-h
--membantu
Tampilkan bantuan tentang penggunaan gcov (pada output standar), dan keluar tanpa melakukan apa pun
proses lebih lanjut.
-v
--Versi: kapan
Tampilkan gcov nomor versi (pada output standar), dan keluar tanpa melakukan apa pun
proses lebih lanjut.
-a
--semua-blok
Tulis jumlah eksekusi individual untuk setiap blok dasar. Biasanya keluaran gcov
eksekusi hanya dihitung untuk blok utama dari suatu baris. Dengan opsi ini Anda dapat
menentukan apakah blok dalam satu baris tidak dieksekusi.
-b
--cabang-probabilitas
Tulis frekuensi cabang ke file output, dan tulis info ringkasan cabang ke
keluaran standar. Opsi ini memungkinkan Anda untuk melihat seberapa sering setiap cabang dalam program Anda
diambil. Cabang tanpa syarat tidak akan ditampilkan, kecuali jika -u pilihan diberikan.
-c
--jumlah cabang
Tulis frekuensi cabang sebagai jumlah cabang yang diambil, bukan persentase
cabang yang diambil.
-n
--tidak ada keluaran
Jangan membuat gcov berkas keluaran.
-l
--nama-file-panjang
Buat nama file yang panjang untuk file sumber yang disertakan. Misalnya, jika file header xh
berisi kode, dan disertakan dalam file ac, lalu berlari gcov pada file ac
akan menghasilkan file output yang disebut ac##xhgcov alih-alih xhgcov. Ini bisa
berguna jika xh disertakan dalam beberapa file sumber dan Anda ingin melihat individu
kontribusi. Jika Anda menggunakan -p opsi, baik nama file yang disertakan maupun yang disertakan
akan menjadi nama jalur yang lengkap.
-p
--melestarikan-jalur
Pertahankan informasi jalur lengkap atas nama yang dihasilkan .gcov file. Tanpa
opsi ini, hanya komponen nama file yang digunakan. Dengan opsi ini, semua direktori
digunakan, dengan / karakter diterjemahkan ke # karakter, . komponen direktori dihapus
dan tak terhapuskan .. komponen berganti nama menjadi ^. Ini berguna jika file sumber ada di
beberapa direktori yang berbeda.
-r
--relatif-saja
Hanya menampilkan informasi tentang file sumber dengan nama path relatif (setelah sumber
eliminasi awalan). Jalur absolut biasanya berupa file header sistem dan cakupan dari semua
fungsi inline di dalamnya biasanya tidak menarik.
-f
--fungsi-ringkasan
Ringkasan keluaran untuk setiap fungsi selain ringkasan tingkat file.
-o direktori|file
--objek-direktori direktori
--file-objek fillet
Tentukan direktori yang berisi file data gcov, atau nama jalur objek.
.gcno, dan .gcda file data dicari menggunakan opsi ini. Jika sebuah direktori adalah
ditentukan, file data berada di direktori itu dan dinamai menurut nama file input,
tanpa ekstensinya. Jika file ditentukan di sini, file data diberi nama setelah
file itu, tanpa ekstensinya.
-s direktori
--sumber-awalan direktori
Awalan untuk nama file sumber yang akan dihapus saat membuat file cakupan keluaran.
Opsi ini berguna saat membangun di direktori terpisah, dan nama path ke
direktori sumber tidak diinginkan saat menentukan nama file keluaran. Perhatikan bahwa ini
deteksi awalan diterapkan sebelum menentukan apakah file sumber itu mutlak.
-u
--cabang-tanpa syarat
Ketika probabilitas cabang diberikan, sertakan cabang tanpa syarat.
Cabang tanpa syarat biasanya tidak menarik.
-d
--tampilan-kemajuan
Menampilkan kemajuan pada output standar.
-i
--format-menengah
Keluarkan file gcov dalam format teks perantara yang mudah diurai yang dapat digunakan oleh lcov
atau alat lainnya. Outputnya tunggal .gcov berkas per .gcda mengajukan. Tidak ada kode sumber
diperlukan.
Format perantara .gcov file adalah teks biasa dengan satu entri per baris
mengajukan:
fungsi: , ,
jumlah: ,
cabang: ,
Dimana adalah
notexec (Cabang tidak dieksekusi)
diambil (Cabang dieksekusi dan diambil)
nottake (Cabang dieksekusi, tetapi tidak diambil)
Bisa banyak entri di gcov . perantara
mengajukan. Semua entri mengikuti a berkaitan dengan file sumber itu
sampai selanjutnya pintu masuk.
Berikut adalah contoh ketika -i digunakan bersama dengan -b opsi:
file: array.cc
fungsi:11,1,_Z3sumRKSt6vectorIPiSaIS0_EE
fungsi: 22,1, utama
hitung:11,1
hitung:12,1
hitung:14,1
cabang: 14, diambil
hitung:26,1
cabang: 28, tidak diambil
-m
--nama-nama yang dirusak
Tampilkan nama fungsi yang diurai dalam output. Standarnya adalah untuk menampilkan fungsi yang rusak
nama.
gcov harus dijalankan dengan direktori saat ini sama seperti ketika Anda memanggil
penyusun. Jika tidak, itu tidak akan dapat menemukan file sumber. gcov menghasilkan file
bernama nama hancur.gcov di direktori saat ini. Ini berisi informasi cakupan
dari file sumber yang sesuai dengannya. Satu .gcov file diproduksi untuk setiap sumber (atau
header) file yang berisi kode, yang dikompilasi untuk menghasilkan file data. NS
nama hancur bagian dari nama file keluaran biasanya hanya nama file sumber, tetapi dapat
menjadi sesuatu yang lebih rumit jika -l or -p pilihan diberikan. Lihat opsi tersebut
untuk rincian.
Jika Anda memanggil gcov dengan beberapa file input, kontribusi dari setiap file input adalah
dijumlahkan. Biasanya Anda akan memanggilnya dengan daftar file yang sama dengan tautan terakhir dari
Anda dapat dieksekusi.
.gcov file berisi : bidang terpisah bersama dengan kode sumber program. Format
is
: :
Informasi blok tambahan mungkin berhasil setiap baris, bila diminta oleh opsi baris perintah.
eksekusi_hitung is - untuk baris yang tidak mengandung kode. Baris yang tidak dieksekusi ditandai #####
or ====, tergantung pada apakah mereka dapat dicapai melalui jalur yang tidak luar biasa atau hanya
jalur luar biasa seperti penangan pengecualian C++, masing-masing.
Beberapa baris informasi di awal memiliki baris_nomor dari nol. Garis pembukaan ini adalah
dari bentuk
-:0: :
Urutan dan jumlah baris pembukaan ini akan ditambah sebagai gcov pengembangan
berlangsung --- jangan mengandalkan mereka tetap tidak berubah. Menggunakan label untuk menemukan tertentu
baris pembukaan.
Informasi blok tambahan dalam bentuk
informasi dapat dibaca manusia, tetapi dirancang agar cukup sederhana untuk penguraian mesin
juga.
Saat mencetak persentase, 0% dan 100% hanya dicetak jika nilainya persis 0% dan
100% masing-masing. Nilai lain yang biasanya dibulatkan menjadi 0% atau 100% adalah
bukannya dicetak sebagai nilai non-batas terdekat.
Ketika menggunakan gcov, Anda harus terlebih dahulu mengkompilasi program Anda dengan dua opsi GCC khusus:
-fprofile-arc -cakupan-ftest. Ini memberitahu kompiler untuk menghasilkan tambahan
informasi yang dibutuhkan oleh gcov (pada dasarnya grafik alur program) dan juga termasuk
kode tambahan dalam file objek untuk menghasilkan informasi profil tambahan yang diperlukan
oleh gcov. File tambahan ini ditempatkan di direktori tempat file objek berada
berada.
Menjalankan program akan menyebabkan output profil dihasilkan. Untuk setiap file sumber
dikompilasi dengan -fprofile-arc, sebuah pendamping .gcda file akan ditempatkan di file objek
direktori.
Running gcov dengan nama file sumber program Anda sebagai argumen sekarang akan menghasilkan daftar
kode bersama dengan frekuensi eksekusi untuk setiap baris. Misalnya, jika program Anda
disebut tmp.c, inilah yang Anda lihat ketika Anda menggunakan dasar gcov fasilitas:
$ gcc -fprofile-arcs -cakupan-ftest tmp.c
$ a.keluar
$gcov tmp.c
90.00% dari 10 baris sumber dieksekusi di file tmp.c
Membuat tmp.c.gcov.
File tmp.c.gcov berisi keluaran dari gcov. Berikut ini contohnya:
-: 0:Sumber:tmp.c
-: 0:Grafik:tmp.gcno
-: 0:Data:tmp.gcda
-: 0:Berjalan:1
-: 0:Program:1
-: 1:#sertakan
-: 2:
-: 3:int main (batal)
1: 4:{
1: 5: int i, jumlah;
-: 6:
1: 7: jumlah = 0;
-: 8:
11: 9: untuk (i = 0; i < 10; i++)
10:10: jumlah += i;
-: 11:
1: 12: jika (total != 45)
#####: 13: printf("Gagal\n");
-: 14: lain
1:15: printf("Berhasil\n");
1: 16: kembalikan 0;
-: 17:}
Saat Anda menggunakan -a opsi, Anda akan mendapatkan jumlah blok individual, dan hasilnya terlihat
seperti ini:
-: 0:Sumber:tmp.c
-: 0:Grafik:tmp.gcno
-: 0:Data:tmp.gcda
-: 0:Berjalan:1
-: 0:Program:1
-: 1:#sertakan
-: 2:
-: 3:int main (batal)
1: 4:{
1: 4-blok 0
1: 5: int i, jumlah;
-: 6:
1: 7: jumlah = 0;
-: 8:
11: 9: untuk (i = 0; i < 10; i++)
11: 9-blok 0
10:10: jumlah += i;
10: 10-blok 0
-: 11:
1: 12: jika (total != 45)
1: 12-blok 0
#####: 13: printf("Gagal\n");
$$$$$: 13 blok 0
-: 14: lain
1:15: printf("Berhasil\n");
1: 15-blok 0
1: 16: kembalikan 0;
1: 16-blok 0
-: 17:}
Dalam mode ini, setiap blok dasar hanya ditampilkan pada satu baris -- baris terakhir dari blok tersebut. A
blok multi-baris hanya akan berkontribusi pada jumlah eksekusi baris terakhir itu, dan lainnya
baris tidak akan ditampilkan berisi kode, kecuali blok sebelumnya berakhir pada baris tersebut. NS
jumlah eksekusi total dari suatu baris ditampilkan dan baris berikutnya menunjukkan jumlah eksekusi
untuk blok individu yang berakhir pada baris itu. Setelah setiap blok, cabang dan panggilan dihitung
dari blok akan ditampilkan, jika -b pilihan diberikan.
Karena cara instrumen GCC memanggil, jumlah panggilan dapat ditampilkan setelah saluran tanpa no
blok individu. Seperti yang Anda lihat, baris 13 berisi blok dasar yang tidak dieksekusi.
Saat Anda menggunakan -b opsi, output Anda terlihat seperti ini:
$gcov -b tmp.c
90.00% dari 10 baris sumber dieksekusi di file tmp.c
80.00% dari 5 cabang dieksekusi di file tmp.c
80.00% dari 5 cabang diambil setidaknya sekali dalam file tmp.c
50.00% dari 2 panggilan dieksekusi di file tmp.c
Membuat tmp.c.gcov.
Berikut adalah contoh hasil tmp.c.gcov File:
-: 0:Sumber:tmp.c
-: 0:Grafik:tmp.gcno
-: 0:Data:tmp.gcda
-: 0:Berjalan:1
-: 0:Program:1
-: 1:#sertakan
-: 2:
-: 3:int main (batal)
fungsi utama disebut 1 dikembalikan 1 blok dieksekusi 75%
1: 4:{
1: 5: int i, jumlah;
-: 6:
1: 7: jumlah = 0;
-: 8:
11: 9: untuk (i = 0; i < 10; i++)
cabang 0 diambil 91% (fallthrough)
cabang 1 diambil 9%
10:10: jumlah += i;
-: 11:
1: 12: jika (total != 45)
cabang 0 diambil 0% (fallthrough)
cabang 1 diambil 100%
#####: 13: printf("Gagal\n");
panggilan 0 tidak pernah dieksekusi
-: 14: lain
1:15: printf("Berhasil\n");
panggilan 0 disebut 1 kembali 100%
1: 16: kembalikan 0;
-: 17:}
Untuk setiap fungsi, garis dicetak menunjukkan berapa kali fungsi dipanggil, bagaimana
berkali-kali ia kembali dan berapa persentase blok fungsi yang dieksekusi.
Untuk setiap blok dasar, sebuah garis dicetak setelah baris terakhir dari blok dasar yang menjelaskan
cabang atau panggilan yang mengakhiri blok dasar. Mungkin ada banyak cabang dan panggilan
terdaftar untuk satu baris sumber jika ada beberapa blok dasar yang berakhir pada baris itu.
Dalam hal ini, cabang dan panggilan masing-masing diberi nomor. Tidak ada cara sederhana untuk
memetakan cabang-cabang ini dan memanggil kembali ke konstruksi sumber. Namun, secara umum, yang terendah
cabang atau panggilan bernomor akan sesuai dengan konstruksi paling kiri pada baris sumber.
Untuk cabang, jika dieksekusi setidaknya sekali, maka persentase yang menunjukkan jumlah
kali cabang diambil dibagi dengan berapa kali cabang dieksekusi akan
dicetak. Jika tidak, pesan "tidak pernah dieksekusi" akan dicetak.
Untuk panggilan, jika dijalankan setidaknya sekali, maka persentase yang menunjukkan jumlah
kali panggilan dikembalikan dibagi dengan berapa kali panggilan dieksekusi akan
dicetak. Ini biasanya 100%, tetapi mungkin kurang untuk fungsi yang memanggil "keluar" atau
"longjmp", dan dengan demikian mungkin tidak kembali setiap kali dipanggil.
Jumlah eksekusi bersifat kumulatif. Jika contoh program dijalankan lagi tanpa
menghapus .gcda file, hitung berapa kali setiap baris dalam sumber itu
dieksekusi akan ditambahkan ke hasil proses sebelumnya. Ini berpotensi berguna
dalam beberapa cara. Misalnya, ini dapat digunakan untuk mengumpulkan data melalui sejumlah
program berjalan sebagai bagian dari rangkaian verifikasi pengujian, atau untuk memberikan jangka panjang yang lebih akurat
informasi melalui sejumlah besar program berjalan.
Data di .gcda file disimpan segera sebelum program keluar. Untuk setiap
file sumber dikompilasi dengan -fprofile-arc, kode profil pertama kali mencoba membaca dalam
ada .gcda mengajukan; jika file tidak cocok dengan executable (berbeda jumlah basic
jumlah blok) itu akan mengabaikan isi file. Itu kemudian menambahkan eksekusi baru
menghitung dan akhirnya menulis data ke file.
Menggunakan gcov dengan GCC Optimasi
Jika Anda berencana untuk menggunakan gcov untuk membantu mengoptimalkan kode Anda, Anda harus terlebih dahulu mengkompilasi program Anda
dengan dua opsi GCC khusus: -fprofile-arc -cakupan-ftest. Selain itu, Anda bisa
gunakan opsi GCC lainnya; tetapi jika Anda ingin membuktikan bahwa setiap baris dalam program Anda
dieksekusi, Anda tidak boleh mengkompilasi dengan optimasi pada saat yang bersamaan. Pada beberapa mesin
pengoptimal dapat menghilangkan beberapa baris kode sederhana dengan menggabungkannya dengan baris lain.
Misalnya, kode seperti ini:
jika (a != b)
c = 1;
lain
c = 0;
dapat dikompilasi menjadi satu instruksi pada beberapa mesin. Dalam hal ini, tidak ada cara untuk
gcov untuk menghitung jumlah eksekusi terpisah untuk setiap baris karena tidak ada yang terpisah
kode untuk setiap baris. Oleh karena itu gcov output terlihat seperti ini jika Anda mengkompilasi program
dengan pengoptimalan:
100:12:jika (a != b)
100 : 13 : c = 1;
100: 14: lain
100 : 15 : c = 0;
Outputnya menunjukkan bahwa blok kode ini, dikombinasikan dengan optimasi, dieksekusi 100 kali.
Di satu sisi hasil ini benar, karena hanya ada satu instruksi yang mewakili
keempat garis tersebut. Namun, output tidak menunjukkan berapa kali hasilnya
adalah 0 dan berapa kali hasilnya adalah 1.
Fungsi inlineable dapat membuat jumlah baris tak terduga. Jumlah baris ditampilkan untuk
kode sumber dari fungsi inlineable, tetapi apa yang ditampilkan tergantung di mana fungsinya
inline, atau jika tidak inline sama sekali.
Jika fungsinya tidak digarisbawahi, kompiler harus mengeluarkan salinan yang keluar dari baris
fungsi, dalam file objek apa pun yang membutuhkannya. Jika fileA.o dan fileB.o keduanya mengandung dari
badan garis dari fungsi inlineable tertentu, keduanya juga akan berisi cakupan
diperhitungkan untuk fungsi tersebut. Kapan fileA.o dan fileB.o dihubungkan bersama-sama, linker akan,
pada banyak sistem, pilih salah satu badan di luar jalur untuk semua panggilan ke fungsi itu,
dan menghapus atau mengabaikan yang lain. Sayangnya, itu tidak akan menghapus penghitung cakupan
untuk tubuh fungsi yang tidak digunakan. Oleh karena itu ketika diinstrumentasi, semua kecuali satu penggunaan fungsi itu
akan menunjukkan hitungan nol.
Jika fungsi digariskan di beberapa tempat, struktur blok di setiap lokasi mungkin
tidak menjadi sama. Misalnya, suatu kondisi sekarang mungkin dapat dihitung pada waktu kompilasi di
beberapa contoh. Karena cakupan semua penggunaan fungsi inline akan ditampilkan
untuk baris sumber yang sama, jumlah baris itu sendiri mungkin tampak tidak konsisten.
Aplikasi yang berjalan lama dapat menggunakan fasilitas "_gcov_reset" dan "_gcov_dump" untuk
membatasi pengumpulan profil ke wilayah program yang diminati. Memanggil "_gcov_reset(void)"
akan menghapus semua penghitung profil menjadi nol, dan memanggil "_gcov_dump(void)" akan menyebabkan
informasi profil yang dikumpulkan pada saat itu untuk dibuang ke .gcda file keluaran.
Gunakan alpha-linux-gnu-gcov-5 online menggunakan layanan onworks.net