Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen alpha-linux-gnu-gcov komutudur.
Program:
ADI
gcov - kapsam test aracı
SİNOPSİS
[-v|--versiyon] [-h|--yardım et]
[-a|--tüm bloklar]
[-b|--dal-olasılıklar]
[-c|--dal-sayımları]
[-d|--görüntüleme-ilerleme]
[-f|--fonksiyon-özetler]
[-i|--orta format]
[-l|--uzun-dosya-adları]
[-m|--dengled-isimler]
[-n|--çıktı yok]
[-o|--nesne-dizini dizin|dosya]
[-p|--koruyucu-yollar]
[-r|--göreceli-yalnızca]
[-s|--kaynak öneki rehber]
[-u|--koşulsuz-dallar]
Dosyaları
TANIM
gcov bir test kapsama programıdır. Programlarınızı analiz etmek için GCC ile uyum içinde kullanın.
daha verimli, daha hızlı çalışan kod oluşturmaya ve kodunuzun test edilmemiş kısımlarını keşfetmeye yardımcı olun.
programı. Kullanabilirsiniz gcov optimizasyonunuzun nerede olduğunu keşfetmenize yardımcı olacak bir profil oluşturma aracı olarak
çabalar kodunuzu en iyi şekilde etkiler. Ayrıca kullanabilirsiniz gcov diğer profil oluşturma ile birlikte
aracı, gprof, kodunuzun hangi bölümlerinin en fazla bilgi işlem süresini kullandığını değerlendirmek için.
Profil oluşturma araçları, kodunuzun performansını analiz etmenize yardımcı olur. gibi bir profil oluşturucu kullanma gcov
or gprof, aşağıdakiler gibi bazı temel performans istatistiklerini öğrenebilirsiniz:
* her bir kod satırının ne sıklıkla yürütüldüğü
* gerçekte hangi kod satırları yürütülür
* kodun her bölümünün ne kadar bilgi işlem süresi kullandığı
Kodunuzun derlendiğinde nasıl çalıştığı hakkında bunları öğrendikten sonra, her birine bakabilirsiniz.
Hangi modüllerin optimize edilmesi gerektiğini görmek için modül. gcov nerede çalışacağınızı belirlemenize yardımcı olur
optimizasyon hakkında.
Yazılım geliştiriciler ayrıca, emin olmak için test takımlarıyla uyumlu olarak kapsam testini kullanır.
yazılım aslında bir sürüm için yeterince iyi. Test takımları, bir programın
beklendiği gibi çalışır; Bir kapsama programı, programın ne kadarının uygulandığını görmek için test eder.
test süiti. Geliştiriciler daha sonra ne tür test senaryolarının eklenmesi gerektiğini belirleyebilir.
Hem daha iyi testler hem de daha iyi bir nihai ürün oluşturmak için test takımları.
Kullanmayı planlıyorsanız, kodunuzu optimizasyon olmadan derlemelisiniz. gcov Çünkü
optimizasyon, bazı kod satırlarını tek bir işlevde birleştirerek size o kadar çok şey vermeyebilir.
kodun çok fazla bilgi kullandığı 'sıcak noktalar' aramanız gerektiğinden bilgi
bilgisayar zamanı. Aynı şekilde, çünkü gcov istatistikleri satıra göre toplar (en düşük
çözünürlük), her birine yalnızca bir ifade yerleştiren bir programlama stiliyle en iyi sonucu verir.
hat. Döngülere veya diğer kontrol yapılarına genişleyen karmaşık makrolar kullanıyorsanız,
istatistikler daha az faydalıdır---yalnızca makronun çağırdığı hatta rapor verirler
görünür. Karmaşık makrolarınız işlevler gibi davranıyorsa, bunları satır içi ile değiştirebilirsiniz.
Bu sorunu çözmek için işlevler.
gcov adlı bir günlük dosyası oluşturur kaynak dosya.gcov bu, her satırın kaç kez olduğunu gösterir
bir kaynak dosya kaynak dosya.c yürütmüştür. Bu günlük dosyalarını birlikte kullanabilirsiniz. gprof için
programlarınızın performansına ince ayar yapmanıza yardımcı olur. gprof size zamanlama bilgisi verir
aldığınız bilgilerle birlikte kullanabilirsiniz gcov.
gcov yalnızca GCC ile derlenen kod üzerinde çalışır. Başka herhangi bir profil oluşturma ile uyumlu değildir
veya test kapsama mekanizması.
SEÇENEKLER
-h
--yardım et
kullanma hakkında yardım göster gcov (standart çıktıda) ve herhangi bir işlem yapmadan çıkın
ilave işlemler.
-v
--versiyon
Görüntüle gcov sürüm numarası (standart çıktıda) ve herhangi bir işlem yapmadan çıkın
ilave işlemler.
-a
--tüm bloklar
Her temel blok için ayrı yürütme sayıları yazın. Normalde gcov çıktıları
yürütme yalnızca bir satırın ana blokları için geçerlidir. Bu seçenek ile şunları yapabilirsiniz:
tek bir satırdaki blokların yürütülüp yürütülmediğini belirleyin.
-b
--dal-olasılıklar
Çıktı dosyasına dal frekanslarını yazın ve dal özet bilgisini çıktı dosyasına yazın.
standart çıktı. Bu seçenek, programınızdaki her bir dalın ne sıklıkta olduğunu görmenizi sağlar.
alındı. Koşulsuz dallar gösterilmediği sürece gösterilmeyecektir. -u seçenek verilir.
-c
--dal-sayımları
Dal frekanslarını yüzde olarak değil, alınan dal sayısı olarak yazın.
alınan dallar.
-n
--çıktı yok
oluşturma gcov çıktı dosyası.
-l
--uzun-dosya-adları
Dahil edilen kaynak dosyalar için uzun dosya adları oluşturun. Örneğin, eğer başlık dosyası xh
kod içeriyor ve dosyaya dahil edildi AC, sonra koşuyor gcov dosyada AC
adlı bir çıktı dosyası üretecek ac##xhgcov yerine xhgcov. Bu olabilir
faydalı ise xh birden fazla kaynak dosyaya dahil edilmiştir ve kişiyi görmek istiyorsunuz
katkılar. kullanırsanız -p seçeneği, hem dahil edilen hem de dahil edilen dosya adları
tam yol adları olacaktır.
-p
--koruyucu-yollar
Oluşturulan adlarda tam yol bilgilerini koruyun .gcov Dosyalar. Olmadan
bu seçenek, sadece dosya adı bileşeni kullanılır. Bu seçenek ile tüm dizinler
ile kullanılır / çevrilen karakterler # karakterler, . dizin bileşenleri kaldırıldı
ve kaldırılamaz .. bileşenleri yeniden adlandırıldı ^. Bu, kaynak dosyalar içindeyse kullanışlıdır.
birkaç farklı dizin.
-r
--göreceli-yalnızca
Yalnızca göreli bir yol adına sahip kaynak dosyalar hakkında bilgi çıktısı alın (kaynaktan sonra
ön ek elision). Mutlak yollar genellikle sistem başlık dosyalarıdır ve herhangi bir
buradaki satır içi işlevler normalde ilgi çekici değildir.
-f
--fonksiyon-özetler
Dosya düzeyinde özete ek olarak her işlev için çıktı özetleri.
-o dizin|dosya
--nesne-dizini rehber
--object-dosyası dosya
gcov veri dosyalarını içeren dizini veya nesne yolu adını belirtin.
The .gcno, ve .gcda veri dosyaları bu seçeneği kullanmak için aranır. bir dizin ise
belirtilen, veri dosyaları o dizindedir ve giriş dosyası adından sonra adlandırılır,
uzantısı olmadan. Burada bir dosya belirtilirse, veri dosyaları şu şekilde adlandırılır:
bu dosya, uzantısı olmadan.
-s rehber
--kaynak öneki rehber
Çıktı kapsamı dosyaları oluşturulurken kaldırılacak kaynak dosya adları için bir önek.
Bu seçenek, ayrı bir dizinde ve dizin yolunun adını oluştururken kullanışlıdır.
çıktı dosyası adları belirlenirken kaynak dizin istenmez. unutmayın ki bu
kaynak dosyanın mutlak olup olmadığını belirlemeden önce önek tespiti uygulanır.
-u
--koşulsuz-dallar
Dallanma olasılıkları verildiğinde, koşulsuz dalların olasılıklarını dahil edin.
Koşulsuz dallar normalde ilginç değildir.
-d
--görüntüleme-ilerleme
Standart çıktıdaki ilerlemeyi görüntüleyin.
-i
--orta format
gcov dosyasını aşağıdakiler tarafından kullanılabilecek, ayrıştırılması kolay bir ara metin biçiminde çıktı alın. lkov
veya diğer araçlar. Çıktı tek .gcov dosya başına .gcda dosya. Kaynak kodu yok
gereklidir.
ara ürün formatı .gcov dosya, satır başına bir giriş içeren düz metindir
dosya:
işlev: , ,
sayıyorum: ,
dal: ,
Nerede NS
notexec (Şube yürütülmedi)
alınan (Şube yürütülür ve alınır)
alınmadı (Dal yürütüldü, ancak alınmadı)
birden fazla olabilir bir ara gcov'daki girişler
dosya. Aşağıdaki tüm girişler o kaynak dosyayla ilgili
Sıradakine kadar giriş.
İşte bir örnek ne zaman -i ile birlikte kullanılır -b seçenek:
dosya:dizi.cc
işlev:11,1,_Z3sumRKSt6vektörIPiSaIS0_EE
fonksiyon:22,1,ana
hesap:11,1
hesap:12,1
hesap:14,1
şube:14,alındı
hesap:26,1
şube:28,alınmadı
-m
--dengled-isimler
Dağıtılmış işlev adlarını çıktıda görüntüleyin. Varsayılan, karışık işlevi göstermektir
isimler.
gcov çağrıldığınızda olduğu gibi geçerli dizinde çalıştırılmalıdır.
derleyici. Aksi takdirde kaynak dosyaları bulamaz. gcov dosyalar üretir
denilen karışıkadı.gcov geçerli dizinde. Bunlar kapsama bilgilerini içerir
karşılık geldikleri kaynak dosyanın. Bir .gcov dosya her kaynak için üretilir (veya
başlık) veri dosyalarını üretmek için derlenen kodu içeren dosya. NS
karışık isim çıktı dosyası adının bir kısmı genellikle yalnızca kaynak dosya adıdır, ancak
eğer daha karmaşık bir şey olmak -l or -p seçenekler verilir. Bu seçeneklere bakın
Ayrıntılar için.
eğer çağırırsan gcov birden çok girdi dosyasıyla, her girdi dosyasından gelen katkılar
toplanmış. Tipik olarak, onu, dosyanın son bağlantısıyla aynı dosya listesiyle çağırırsınız.
yürütülebilir dosyanız.
The .gcov dosyalar şunları içerir: : program kaynak kodu ile birlikte ayrılmış alanlar. Biçim
is
: :
Komut satırı seçeneği tarafından istendiğinde, ek blok bilgileri her satırda başarılı olabilir.
The yürütme_sayısı is - kod içermeyen satırlar için. Yürütülmeyen satırlar işaretlenir #####
or ====, istisnai olmayan yollarla mı yoksa yalnızca
sırasıyla C++ istisna işleyicileri gibi istisnai yollar.
Başlangıçtaki bazı bilgi satırları satır_numarası sıfır. Bu önsöz satırları
şeklinde
-:0: :
Bu giriş satırlarının sırası ve sayısı şu şekilde artırılacaktır: gcov gelişme
ilerlemeler --- değişmeden kaldıklarına güvenmeyin. Kullanmak etiket belirli bir yeri bulmak için
önsöz satırı.
Ek blok bilgileri şu şekildedir:
The bilgi insan tarafından okunabilir, ancak makine ayrıştırması için yeterince basit olacak şekilde tasarlanmıştır
çok.
Yüzdeler yazdırılırken, %0 ve %100 yalnızca değerler yazdırıldığında yazdırılır. kesinlikle % 0 ve
sırasıyla %100. Geleneksel olarak %0 veya %100'e yuvarlanacak diğer değerler şunlardır:
bunun yerine en yakın sınır dışı değer olarak yazdırılır.
Kullanırken gcov, önce programınızı iki özel GCC seçeneğiyle derlemeniz gerekir:
-fprofile-yayları -ftest-kapsama. Bu, derleyiciye ek oluşturmasını söyler.
gcov tarafından ihtiyaç duyulan bilgiler (temelde programın bir akış grafiği) ve ayrıca şunları içerir:
gereken ekstra profil bilgilerini oluşturmak için nesne dosyalarındaki ek kod
gcov tarafından Bu ek dosyalar, nesne dosyasının bulunduğu dizine yerleştirilir.
bulunmaktadır.
Programı çalıştırmak, profil çıktısının oluşturulmasına neden olacaktır. Her kaynak dosya için
ile derlenmiş -fprofile-yaylarıeşlik eden .gcda dosya nesne dosyasına yerleştirilecek
dizin.
Koşu gcov argümanlar olarak programınızın kaynak dosya adlarıyla artık bir liste üretecek
kodun yanı sıra her satır için yürütme sıklığı. Örneğin, eğer programınız
denir tmp.c, temel kullandığınızda gördüğünüz şey budur. gcov tesis:
$ gcc -fprofile-arcs -ftest-kapsamlı tmp.c
$ bir.dışarı
$ gcov tmp.c
tmp.c dosyasında yürütülen 90.00 kaynak satırın %10'u
tmp.c.gcov oluşturuluyor.
Dosya tmp.c.gcov çıktı içerir gcov. İşte bir örnek:
-: 0:Kaynak:tmp.c
-: 0:Grafik:tmp.gcno
-: 0:Veri:tmp.gcda
-: 0:Çalışmalar:1
-: 0:Programlar:1
-: 1:#dahil
-: 2:
-: 3:int ana (geçersiz)
1:4:{
1: 5: int i, toplam;
-: 6:
1: 7: toplam = 0;
-: 8:
11: 9: için (i = 0; i < 10; i++)
10: 10: toplam += ben;
-: 11:
1: 12: ise (toplam != 45)
#####: 13: printf ("Hata\n");
-: 14: başka
1: 15: printf ("Başarı\n");
1: 16: 0 döndür;
-: 17:}
Kullandığınızda -a seçeneği, bireysel blok sayıları alacaksınız ve çıktı görünüyor
bunun gibi:
-: 0:Kaynak:tmp.c
-: 0:Grafik:tmp.gcno
-: 0:Veri:tmp.gcda
-: 0:Çalışmalar:1
-: 0:Programlar:1
-: 1:#dahil
-: 2:
-: 3:int ana (geçersiz)
1:4:{
1: 4-blok 0
1: 5: int i, toplam;
-: 6:
1: 7: toplam = 0;
-: 8:
11: 9: için (i = 0; i < 10; i++)
11: 9-blok 0
10: 10: toplam += ben;
10: 10-blok 0
-: 11:
1: 12: ise (toplam != 45)
1: 12-blok 0
#####: 13: printf ("Hata\n");
$$$$$: 13-blok 0
-: 14: başka
1: 15: printf ("Başarı\n");
1: 15-blok 0
1: 16: 0 döndür;
1: 16-blok 0
-: 17:}
Bu modda, her temel blok yalnızca bir satırda gösterilir - bloğun son satırı. A
çok satırlı blok yalnızca o son satırın yürütme sayısına ve diğer
önceki bloklar bu satırlarda bitmediği sürece satırların kod içerdiği gösterilmeyecektir. NS
bir satırın toplam yürütme sayısı gösterilir ve sonraki satırlar yürütme sayılarını gösterir
o satırda biten bireysel bloklar için. Her bloktan sonra şube ve çağrı sayar
bloğun numarası gösterilecektir, eğer -b seçenek verilir.
GCC cihazlarının arama şekli nedeniyle, bir hattan sonra bir arama sayısı gösterilebilir.
bireysel bloklar. Gördüğünüz gibi, satır 13, yürütülmemiş bir temel blok içeriyor.
Kullandığınızda -b seçeneği, çıktınız şöyle görünür:
$ gcov -b tmp.c
tmp.c dosyasında yürütülen 90.00 kaynak satırın %10'u
tmp.c dosyasında yürütülen 80.00 dalın %5'i
tmp.c dosyasında en az bir kez alınan 80.00 dalın %5'i
tmp.c dosyasında yürütülen 50.00 çağrının %2'si
tmp.c.gcov oluşturuluyor.
İşte bir sonuç örneği tmp.c.gcov Dosya:
-: 0:Kaynak:tmp.c
-: 0:Grafik:tmp.gcno
-: 0:Veri:tmp.gcda
-: 0:Çalışmalar:1
-: 0:Programlar:1
-: 1:#dahil
-: 2:
-: 3:int ana (geçersiz)
ana çağrılan işlev 1 döndürüldü 1 blok yürütüldü %75
1:4:{
1: 5: int i, toplam;
-: 6:
1: 7: toplam = 0;
-: 8:
11: 9: için (i = 0; i < 10; i++)
şube 0 %91 alındı (son geçiş)
şube 1 alınan 9%
10: 10: toplam += ben;
-: 11:
1: 12: ise (toplam != 45)
şube 0 %0 alındı (son geçiş)
şube 1 alınan 100%
#####: 13: printf ("Hata\n");
0 çağrısı hiç yürütülmedi
-: 14: başka
1: 15: printf ("Başarı\n");
çağrı 0 çağrıldı 1 %100 döndürüldü
1: 16: 0 döndür;
-: 17:}
Her fonksiyon için, fonksiyonun kaç kez çağrıldığını, nasıl çağrıldığını gösteren bir satır yazdırılır.
birçok kez döner ve işlevin bloklarının yüzde kaçının yürütüldüğü.
Her temel blok için, temel bloğu tanımlayan son satırın ardından bir satır yazdırılır.
temel bloğu sonlandıran şube veya çağrı. Birden fazla şube ve çağrı olabilir
o satırda biten birden çok temel blok varsa, tek bir kaynak satır için listelenir.
Bu durumda şubelere ve çağrılara birer numara verilir. basit bir yolu yok
bu dalları eşleyin ve kaynak yapılara geri çağrı yapın. Ancak genel olarak en düşük
numaralı dal veya çağrı, kaynak satırındaki en soldaki yapıya karşılık gelir.
Bir dal için, en az bir kez çalıştırılmışsa, şube sayısını gösteren bir yüzde
şubenin alınma sayısı, şubenin yürütülme sayısına bölünür
basılmış. Aksi takdirde, "asla yürütülmedi" mesajı yazdırılır.
Bir arama için, en az bir kez gerçekleştirilmişse, arama sayısını belirten bir yüzde
döndürülen aramanın, aramanın yürütülme sayısına bölünmesiyle elde edilir.
basılmış. Bu genellikle %100 olur, ancak "çıkış" veya "çıkış" çağrısı yapan işlevler için daha az olabilir.
"longjmp" ve bu nedenle her çağrıldıklarında geri dönmeyebilir.
Yürütme sayıları kümülatiftir. Örnek program yeniden çalıştırılsa
kaldırmak .gcda dosyasında, kaynaktaki her satırın kaç kez
yürütülen önceki çalıştırma(lar)ın sonuçlarına eklenecektir. Bu potansiyel olarak yararlıdır
çeşitli yollarla. Örneğin, bir dizi üzerinden veri toplamak için kullanılabilir.
program, bir test doğrulama paketinin parçası olarak çalışır veya daha doğru uzun vadeli
çok sayıda program çalıştırması hakkında bilgi.
İçindeki veriler .gcda dosyalar program çıkmadan hemen önce kaydedilir. Her biri için
ile derlenmiş kaynak dosya -fprofile-yayları, profil oluşturma kodu önce bir
mevcut .gcda dosya; dosya yürütülebilir dosyayla eşleşmiyorsa (farklı sayıda temel
blok sayıları) dosyanın içeriğini yok sayar. Daha sonra yeni yürütmeye ekler
sayar ve son olarak verileri dosyaya yazar.
kullanma gcov ile GCC Optimizasyon
kullanmayı planlıyorsanız gcov kodunuzu optimize etmeye yardımcı olmak için önce programınızı derlemeniz gerekir.
iki özel GCC seçeneği ile: -fprofile-yayları -ftest-kapsama. Bunun dışında yapabilirsiniz
diğer GCC seçeneklerini kullanın; ama programınızdaki her satırın bunu kanıtlamak istiyorsanız
çalıştırıldığında, aynı anda optimizasyon ile derleme yapmamalısınız. Bazı makinelerde
optimize edici, bazı basit kod satırlarını diğer satırlarla birleştirerek ortadan kaldırabilir.
Örneğin, şöyle kodlayın:
eğer (a != b)
c = 1;
başka
c = 0;
bazı makinelerde tek bir talimatta derlenebilir. Bu durumda, hiçbir şekilde
gcov ayrı olmadığı için her satır için ayrı yürütme sayıları hesaplamak için
Her satır için kod. Bu nedenle gcov programı derlerseniz çıktı şöyle görünür
optimizasyon ile:
100: 12:eğer (a != b)
100:13:c = 1;
100: 14:başka
100:15:c = 0;
Çıktı, optimizasyonla birleştirilen bu kod bloğunun 100 kez yürütüldüğünü gösterir.
Bir anlamda bu sonuç doğrudur, çünkü temsil eden tek bir talimat vardır.
bu satırların dördü. Ancak çıktı, sonucun kaç kez olduğunu göstermez.
0 ve sonucun kaç kez 1 olduğu.
Satırsız işlevler, beklenmeyen satır sayıları oluşturabilir. için satır sayıları gösterilir.
satır içi işlevin kaynak kodu, ancak gösterilen, işlevin nerede olduğuna bağlıdır
satır içi veya hiç satır içi değilse.
İşlev satır içi değilse, derleyicinin satır dışı bir kopyasını çıkarması gerekir.
işlev, ihtiyacı olan herhangi bir nesne dosyasında. Eğer dosyaA.o ve dosyaB.o her ikisi de içerir
belirli bir satır içi işlevin satır gövdeleri, ayrıca her ikisi de kapsama alanı içerecektir
bu işlev için sayılır. Ne zaman dosyaA.o ve dosyaB.o birbirine bağlıysa, bağlayıcı,
birçok sistemde, o işleve yapılan tüm çağrılar için hat dışı gövdelerden birini seçin,
ve diğerini kaldırın veya yoksayın. Ne yazık ki, kapsama sayaçlarını kaldırmayacak
kullanılmayan fonksiyon gövdesi için. Bu nedenle, alet edildiğinde, bu işlevin biri hariç tümü kullanılır.
sıfır sayıları gösterecektir.
İşlev birkaç yerde sıralanmışsa, her konumdaki blok yapısı
aynı olmasın. Örneğin, bir koşul şimdi derleme zamanında hesaplanabilir olabilir.
bazı durumlar. Çünkü satır içi işlevin tüm kullanımlarının kapsamı gösterilecektir.
aynı kaynak satırları için satır sayımları tutarsız görünebilir.
Uzun süredir çalışan uygulamalar, "_gcov_reset" ve "_gcov_dump" olanaklarını kullanabilir.
profil toplamayı ilgilenilen program bölgesiyle sınırlayın. "_gcov_reset(void)" çağrılıyor
tüm profil sayaçlarını sıfırlayacak ve "_gcov_dump(void)" çağrısı
o noktada toplanan profil bilgileri .gcda çıktı dosyaları.
onworks.net hizmetlerini kullanarak alpha-linux-gnu-gcov'u çevrimiçi kullanın