Bugs:gcc

Şuraya atla: kullan, ara

GCC Hatalarını Raporlamak

GCC'ye bildirimde bulunmak için en az üç unsura sahip olmak gereklidir:

  • a testcase
  • a testcase
  • a testcase

Testcase

Testcase kısa bir nesnedir.

 Falanca siteye gittim, bu tarball'ı indirdim, derledim, hata oluştu 

demek değildir. İyi bir testcase dosyası tek bir self-contained dosyayı içerir. Bunun üzerinde durun, tek bir dosya. This means, no includes. Bundan dolayıdır ki, ön-işlemesinin yapılmış olması gerekir. Ön-işlemeyi (preprocess):

 gcc -E [other options ...] source.c > source.i 

ile yapın ve ya -save-temps'ı kullanın. C++ ile ön-işlenmiş dosyalar source.ii olarak adlandırılırlar.

Ayrıca, testcase, kısa olmalıdır. Sadece hatayı gösterecek kaynağı içermelidir. Daha fazla işlevi ya da açıklamayı (declaration) değil. Tüm gereksiz blokları silin. İşe tüm işlevleri, sonrasında üst seviye açıklamaları silerek başlayın ve hatanın oluştuğu işlevi sadeleştirerek devam edin. Yapısallardan (structure'dan) ve sınıfsallardan (classes) gereksiz olan tüm üyeleri (her şeyi? - members?) silin. Hatayı gösterdiği sürece kısaltmaya devam edin. Unutmayın ki sadece gerekli işlevler derlenmektedir. Hiç kullanılmayan durağan işlevler yeni GCC'lerde derlenmemektedir. Bu nedenden dolayı işlevleri etkin hale getirmek isteyebilirsiniz.

Uzunluk iki yüz satırı geçiyorsa bu görece fazla uzun demektir. Yüz satırlık bir hata raporu daha tercih edilir bir rapordur. Üç işlevden daha fazlasını içeren, yine görece olarak, yeterince indirgenmemiş rapordur. Daha iyisini yapmaya çalışın. İndirgemek - kısaltmak zaman alır, ama siz yapmazsanız, biz yapmak zorunda kalırız ki zaten bu konuda ciddi sıkıntılar yaşamaktayız. Bu aynı zamanda hata raporunuz çok büyükse üzerine büyük bir şevkle eğilemeyeceğimiz anlamına da gelmektedir.

Genel Tavsiye

Bütün iyi hata raporlarında olduğu gibi sizin raporunuzda da tarz şu olmalıdır:

 aşağıdakini derlerken:
   <kaynak kodu> ya da ilişik dosyaya gönderme yaptığınız metni yazınız
 aşağıdaki komut verildiğinde:
   % gcc [seçeneklerinizi yazınız] bla.i
 şu olur:
   <sonucu yazınız>
 kullanılan sistem:
   <gcc -v çıktısı>
   <uname -a çıktısı>
 halbuki olmasın beklediğim:
   <beklenen sonucu yazınız>
 çünkü (sebep olarak) <bu şekilde düşünmenizin sebebini yazınız>.

Bazen beklenen sonuç o denli açıktır ki bahis edilmesi gerekmez. Örnek olarak iç derleyici hatası raporluyorsanız, beklenen sonuç, tabiidir ki, ICE'nin gerçekleşmemesidir. Bunu belirtmenize gerek yoktur. Eğer yanlış derlemeden şüphe duyuyorsanız, testcase'i görünür etkisi olan (örnek vermek gerekirse: yanlış sonuç hesaplandığında abort işlevini çağıran - getiren, ya da sonucu istediğiniz şekilde yazdıran (or printing the result, saying which you would expect)) bir runtime testi olarak tasarlayın.

Lütfen kullandığınız komut satırlarını tam olarak iliştirin; -v çıktısını ve -a çıktısını yapıştırın. -O2 ile derleyin türü şeyleri, ya da yaptığınız tanımlamayı mükemmel derecede yeterli olmadığı sürece daha net olmak gerekirse:

 compile with# gcc -c -O2 -fPIC -funny-options bla.i, 

komut terminalden birebir şekilde kes-yapıştır ile aktarılmadığı sürece istemiyoruz.

Sistem ayrıntılarını unutmamaya dikkat ediniz. Have I mentioned that we need a testcase? Bir testcase'e ihtiyaç duyduğumuzu söylemiş miydim?

Nice to have

We use compilers which usually have changes on top of the FSF GCC. Fakat yine de sıklıkla FSF GCC birebir aynı hatayı vermekte. Eğer bu durumu kontrol edebilecek bir durumda iseniz, lütfen yapınız ve hatayı doğrudan GCC'nin bugzilla adresine iletiniz.


Bunun dışında, GCC'nin işine yarayacak iyi bir raporun nasıl oluşturulacağı hakkında ayrıntılı bilgi almak için lütfen http://gcc.gnu.org/bugs.html adresini inceleyiniz.