Büyük projelerde Cscope kullanmak (örnek: Linux çekirdeği)

Description:

Cscope is still being used as an important code search tool. This document is a Turkish translation created by considering the current conditions. Happy reading.

Büyük projelerde Cscope kullanmak (örnek: Linux çekirdeği)

Büyük bir kod blogunda inceleme yapmak zorunda kalırsanız, Cscope faydalı bir araç olabilir. Kaynak dosyalarını elle rasgele grep komutu ile ayiklamak yerine hızlı ve hedefe yonelik aramalar yapabilme yeteneği sayesinde kendinize zaman kazandırabilirsiniz (özellikle de gerçekten büyük bir kod tabanıyla grep yapmak uzun zaman gerektirdiği için).

Bu kılavuzda, Cscope’u büyük bir projede nasıl kuracağınızı öğreneceksiniz. Örnek olarak Linux çekirdek kaynak kodunu kullanacağız, ancak temel adımlar C++ veya Java projeleri de dahil olmak üzere diğer büyük projeler için aynıdır.

  1. Kaynak kodu edinin. İlk olarak kaynak kodunu edinin. Linux çekirdek kaynağını http://www.kernel.org adresinden indirebilirsiniz. Bu kılavuzun geri kalanı için, Linux 2.4.18’i indirdiğinizi ve /home/jru/linux-2.4.18 dizinine kurduğunuzu varsayacağım. (Çevirmen notu: 2.4.18 çok eski bir çekirdektir. Bunun yerine en son linux çekirdegini kullanmanızı öneririm. Bunun için git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git komutunu kullanabilirsiniz. Döküman çevrilirken geçerli versiyon 6.8.2’dir.)

    Not: Yeterli disk alanınız olduğundan emin olun: çekirdek paketi tek başına 30 MB, 150 MB kaynak koduna genişler ve oluşturacağımız Cscope veritabanı başka 20-100+ MB’lık bir alan kaplayacak (veritabanına hangi kadarlık çekirdek kodunu dahil etmeye karar verirseniz bağlı olarak). İhtiyacınız varsa, Cscope veritabanını kaynak kodundan farklı bir disk bölümüne yerleştirebilirsiniz. (Çevirmen Notu: 6.8.2 versiyonu koynak kodu boyutu .gıt klasoru dahil 15 GB kadardır.)
  2. Cscope veritabanı dosyalarınızı nereye koymak istediğinizi belirleyin. Veritabanınızı ve ilişkili dosyalarınızı saklamak için /home/jru/cscope dizinini kullanacağınızı varsayacağım.
  3. Taranacak dosyaların bir listesiyle cscope.files dosyasını oluşturun. Bazı projelerde, projenin dizinlerindeki her C kaynak dosyasını Cscope veritabanınıza dahil etmek isteyebilirsiniz. Bu durumda, bu adımı atlayabilir ve projenin en üst düzey dizininde ‘cscope -R’ kullanarak Cscope veritabanınızı oluşturabilirsiniz. Ancak bazı kodları hariç tutmak istiyorsanız, ve/veya projeniz C++ veya Java kaynak kodu içeriyorsa (varsayılan olarak Cscope, yalnızca .c, .h, .y veya .l uzantılı dosyaları ayrıştırır), Cscope’un taramasını istediğiniz tüm dosyaların adını içeren cscope.files adında bir dosya oluşturmanız gerekecek (her satırda bir dosya adı olmalıdır).

    Muhtemelen mutlak yolları kullanmak isteyeceksiniz (bir kod editöründe Cscope veritabanını kullanmayı planlıyorsanız), böylece veritabanını oluşturduğunuz dizinin dışındaki dizinlerden de veritabanını kullanabilirsiniz. Burada gösterilen komutlar ile önce kök dizinine cd yapacak, böylece find ile mutlak yollar dosyaya yazılacaktır.

    Pek çok proje için aşagıdaki komutu faydalı bulabilirsiniz.

    cd /
    find /my/project/dir -name '*.java' >/my/cscope/dir/cscope.files


    Linux çekirdeği için bu biraz daha karmaşıktır, çünkü dokümanlar ve betik kodları için olan dizinlerindeki tüm kodları, Intel x86 (tahminimce ilgilendiğiniz mimari bu) dışındaki tüm yongaların mimari olusturulmuş assambly kodlarını hariç tutmak istiyoruz. Ayrıca, bu örnekte tüm çekirdek sürücü kodlarını da hariç tutuyorum (Cscope veritabanınını şişiren ve aramayı zorlaştıran birçok yinelenen tanım içerirler. Sürücü kodları ilginizi çekiyorsa, ilgili satırı çıkarın veya yalnızca ilgilendiğiniz sürücü dosyalarını yazdırmak için değiştirin):

    LNX=/home/jru/linux-2.4.18
    cd /
    find $LNX \
    -path "$LNX/arch/*" ! -path "$LNX/arch/i386*" -prune -o \
    -path "$LNX/include/asm-*" ! -path "$LNX/include/asm-i386*" -prune -o \
    -path "$LNX/tmp*" -prune -o \
    -path "$LNX/Documentation*" -prune -o \
    -path "$LNX/scripts*" -prune -o \
    -path "$LNX/drivers*" -prune -o \
    -name "*.[chxsS]" -print >/home/jru/cscope/cscope.files


    (Çevirmen Notu: $LNX/arch/i386* ve $LNX/include/asm-i386* dizinleri artuk geçerli değildir. 64 bit intel mimarili sistemler için bu yolları $LNX/arch/x86_64* değiştirip komutu

    find $LNX \
    -path "$LNX/arch/*" ! -path "$LNX/arch/x86_64*" -prune -o \
    -path "$LNX/tmp*" -prune -o \
    -path "$LNX/Documentation*" -prune -o \
    -path "$LNX/scripts*" -prune -o \
    -path "$LNX/drivers*" -prune -o \
    -name "*.[chxsS]" -print > ~/cscope/cscope.files


    şeklinde kullanmanızı öneririm)


    Find komutları yazmak biraz karmaşık olabilir, ancak büyük projeler için elle dosya listesi düzenlemekten çok daha kolaydır ve başka birinden bir çözümü kopyalayıp yapıştırabilirsiniz.
  4. Cscope veritabanını oluşturun. Şimdi Cscope veritabanını oluşturma zamanı:

    cd /home/jru/cscope # 'cscope.files' dosyasinin oldugu dizin
    cscope -b -q -k


    (Çevirmen Notu: cd ~/cscope/ komutu kullanabilirsiniz.)

    -b bayrağı, Cscope’un sadece veritabanını oluşturmasını ve Cscope GUI’sini başlatmamasını söyler. -q, büyük veritabanlarında aramaların çok daha hızlı çalışmasını sağlayan ek bir ‘ters indeks’ dosyasının oluşturulmasına neden olur. Son olarak, -k Cscope’un ‘çekirdek’ modunu ayarlar–Cscope, kaynak dosyalarınızda #included olan başlık dosyalarını /usr/include dizininde aramaz (bu, işletim sistemi ve/veya C kütüphane kaynak kodları ile Cscope’u kullandığınızda yararlıdır, burada da olduğu gibi).

    900 MHz Pentium III sistemimde (standart bir IDE diski ile), Linux kaynağının bu alt kümesini ayrıştırmak sadece 12 saniye sürer ve toplamda 25 megabayt alan kaplayan 3 dosya (cscope.out, cscope.in.out ve cscope.po.out) üretir.

    (Çevirmen notu: AMD radeon işlemcili SSD disk bir sistemde her ne kadar daha büyük bir kod kümesi ile uğraşıyor olsak da daha da kısa bir sürede işlemin bittiğini söyleyebiliriz. Oluşan dosyaların toplamı 631 megabytedır.)
  5. Veritabanını kullanma. Eğer vim veya emacs/xemacs kullanmayı seviyorsanız, Cscope’u bu düzenleyicilerden biri içinde nasıl çalıştıracağınızı öğrenmenizi öneririm, kod düzenleyiciniz içinde kolayca aramalar yapma imkanı bulunmaktadır. Vim için bir kılavuzumuz var ve emacs kullanıcıları tabii ki Cscope dağıtımının cscope/contrib/xcscope/ dizinindeki yardımcı açıklamaları okuyacak kadar her şeyi zeki kullanıcılardır.

    Diğer durumda, curses tabanlı bir GUI kullanan Cscope arayüzünü kullanabilirsiniz, bu arabirim aramaları yapmanıza izin verir, ardından istediğiniz kod düzenleyiciyicisini başlatır (yani, ortamınızda ayarlanmış olan $EDITOR neyse, eğer tanımlı değilde varsayılan olarak ‘vi’ kullanılır).

    Eğer bağımsız Cscope tarayıcısını kullanacaksanız, şu komutla başlatabilirsiniz:

    cscope -d

    Bu, Cscope’un veritabanını yeniden oluşturmamasını söyler. Aksi takdirde, Cscope değiştirilmiş dosyaları kontrol ederken beklemeniz gerekecektir, bu da büyük projeler hatta dosyalar değişmemiş olsa bile bir süre alabilir. ‘cscope’ komutunu yanlışlıkla herhangi bir bayrak olmadan çalıştırırsanız, hızlı indeks veya çekirdek modları kullanılmadan veritabanının sıfırdan oluşturulmasına neden olursunuz, bu yüzden muhtemelen yukarıdaki orijinal cscope komutunu tekrar çalıştırarak veritabanını doğru şekilde yeniden oluşturmanız gerekecektir.
  6. Kaynak kod değiştikten sonra veritabanını yeniden oluşturma.

    Projede yeni dosyalar varsa ve bunları kullanıyorsanız, cscope.files’ı güncellemek için ‘find’ komutunuzu yeniden çalıştırın.

    Ardından, sadece ilk başta veritabanını oluştururken yaptığınız gibi cscope’u aynı şekilde (ve aynı dizinde) çağırın (yani, cscope -b -q -k).

Orjinal Metnin Yazarı Jason Duell [https://cscope.sourceforge.net/large_projects.html]

Çevirmen Okan Akyüz

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *