SORU
27 Ocak 2011, PERŞEMBE


Nasıl kod asla kullanılan öğrenebilir miyim?

Kullanılmayan kod kaldırmak gerekiyor eski C kodu var. Sorun kod tabanı büyük olmasıdır.

Nasıl hiç kullanmıyorum denilen bulabilirim?

CEVAP
27 Ocak 2011, PERŞEMBE


Kullanılmayan kod iki çeşidi vardır:

  • yerel bir tanesi, bazı işlevler bazı yolları veya değişken kullanılmayan (ya ama yazılı ama asla okumak gibi anlamlı bir şekilde kullanılır)
  • küresel bir: asla çağrılan fonksiyonlar, asla erişilen genel nesneler

İlk tür, iyi bir derleyici yardımcı olabilir:

  • -Wunused (, Clang KİK) kullanılmayan değişkenler hakkında uyarmak gerekir, Çınlama kullanılmayan Çözümleyicisi hatta hiç kullanılmamış olsa bile) okumak değişkenler hakkında uyarmak için artan olmuştur.
  • -Wunreachable-code (Eski GCC, removed in 2010) Hiç (erken döner ya da her zaman doğru değerlendirmek koşulları ile olur) erişilen yerel engeller konusunda uyarmak gerekir
  • derleyici genellikle hiçbir özel durum olacağını ispat edemez çünkü catch kullanılmayan blokları hakkında uyarmak için biliyorum seçeneği yoktur.

İkinci tür, çok daha zor. Statik gerektirir bütün programı analizi, ve olsa bile, bağlantı zaman optimizasyon olabilir aslında kaldırmak ölü kod, uygulama programı olmuştur çok şekil değiştirdin. kez gerçekleştirilen bu neredeyse imkansız iletmek anlamlı bilgiler için Kullanıcı.

Bu nedenle iki yaklaşım vardır:

  • Bu teorik bir statik analiz kullanmaktır. Tüm kodu aynı anda çok detaylı bir şekilde incelemek ve tüm akış yolunu bulacak bir yazılım. Pratikte burada işe yarayacağını bilmiyorum.
  • Bu pragmatik bir sezgisel, kullanımı: kod kapsamı aracı (GNU zincir gcov. kullanın Özel bayraklar düzgün çalışması) için derleme sırasında geçirilmesi gerektiğini unutmayın. Çalıştırdığınız kod kapsama aracı ile çok iyi bir takım çeşitli giriş (birim-testleri veya olmayan regresyon testleri), ölü kod mutlaka içinde unreached Kodu... ve böylece baştan burada.

Konuyla çok ilgilendi, ve aslında kendi başına bir araç bulmak zaman eğilimi varsa, Çınlama kitaplıkları böyle bir alet yapmak kullanmanızı öneriyorum.

  1. Bir AST almak için Çınlama kitaplığı (soyut sözdizimi ağacı) kullanın
  2. Giriş noktalarını İşaretle-ve-sweep analizi ileri gerçekleştirin

Çınlama senin için kodu ayrıştırmak ve tekrar yükleme çözümlemesi gerçekleştirmek için, C dil kuralları ile uğraşmak zorunda kalmazsınız, ve eldeki sorun konsantre mümkün olacak.

Ancak tekniği olamaz böyle bir sebep olamaz code üçüncü taraf tarafından çağrılan olabilir beri kullanılmayan sanal geçersiz kılar belirlemek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • adrianisen

    adrianisen

    25 Kasım 2009
  • Bigapplemagic

    Bigapplemagi

    22 EYLÜL 2011
  • EatingIn

    EatingIn

    12 EKİM 2013