nkk-gdb

NDK, komut satırı yerel hata ayıklama oturumu başlatmak için ndk-gdb adlı bir kabuk komut dosyası içerir. GUI kullanmayı tercih eden kullanıcılar bunun yerine Android Studio'da hata ayıklama ile ilgili dokümanları okumalıdır.

Şartlar

Komut satırı yerel hata ayıklama özelliğinin çalışması için şu koşulların karşılanması gerekir:

  • ndk-build komut dosyasını kullanarak uygulamanızı oluşturun. ndk-gdb komut dosyası, derleme için eski make APP=<name> yönteminin kullanılmasını desteklemez.
  • android:debuggable özelliğini true olarak ayarlayan bir <application> öğesi ekleyerek AndroidManifest.xml dosyanızda uygulama hata ayıklamayı etkinleştirin.
  • Uygulamanızı Android 2.2 (Android API düzeyi 8) veya sonraki sürümlerde çalışacak şekilde oluşturun.
  • Android 2.2 veya sonraki bir sürümü çalıştıran bir cihazda veya emülatörde hata ayıklayın. Hata ayıklama amacıyla AndroidManifest.xml dosyanızda belirttiğiniz hedef API düzeyi önemli değildir.
  • Uygulamanızı bir Unix kabuğunda geliştirin. Windows'da Cygwin veya deneysel ndk-gdb-py Python uygulamasını kullanın.
  • GNU Make 3.81 veya sonraki bir sürümü kullanın.

Kullanım

ndk-gdb komut dosyasını çağırmak için uygulama dizinine veya altındaki bir dizine geçin. Örneğin:

cd $PROJECT
$NDK/ndk-gdb

Burada $PROJECT, projenizin kök dizinine, $NDK ise NDK yükleme yolunuza işaret eder.

ndk-gdb çağırdığınızda oturum, kaynak dosyalarınızı ve oluşturduğunuz yerel kitaplıkların simge/hata ayıklama sürümlerini arayacak şekilde yapılandırılır. ndk-gdb, başvuru sürecinize başarıyla eklendiğinde uzun bir dizi hata mesajı verir. Bu mesaj, çeşitli sistem kitaplıklarının bulunamadığını belirtir. Ana makineniz, hedef kitaplığınızda bu kitaplıkların sembol/hata ayıklama sürümlerini içermediğinden bu durum normaldir. Bu mesajları göz ardı edebilirsiniz.

Ardından ndk-gdb normal bir GDB istemi görüntüler.

ndk-gdb ile GNU GDB ile aynı şekilde etkileşim kurarsınız. Örneğin, kesme noktası ayarlamak için b <location> tuşunu, yürütmeyi devam ettirmek için c ("devam" düğmesini) kullanabilirsiniz. Kapsamlı bir komut listesi için GDB kılavuzunu inceleyin. LLDB Hata Ayıklayıcısı'nı kullanmayı tercih ederseniz ndk-gdb komut dosyasını çağırırken --lldb seçeneğini kullanın.

GDB isteminden çıktığınızda hata ayıklamayı gerçekleştirdiğiniz uygulama işleminin durdurulduğunu unutmayın. Bu davranış bir Gdb sınırlamasıdur.

ndk-gdb birçok hata durumunu ele alır ve bir sorun bulursa bilgilendirici bir hata mesajı gösterir. Bu kontroller, aşağıdaki koşulların karşılandığından emin olmayı içerir:

  • ADB'nin yolunuzda olup olmadığını kontrol eder.
  • Uygulamanızın manifest dosyasında hata ayıklaması yapılıp yapılmadığını kontrol eder.
  • Aynı paket adına sahip yüklü uygulamanın cihazda da hata ayıklaması yapılıp yapılmadığını kontrol eder.

Varsayılan olarak, ndk-gdb zaten çalışan bir uygulama işlemini arar ve bulamazsa bir hata gösterir. Bununla birlikte, hata ayıklama oturumundan önce etkinliğinizi otomatik olarak başlatmak için --start veya --launch=<name> seçeneğini kullanabilirsiniz. Daha fazla bilgi için Seçenekler bölümüne bakın.

Seçenekler

Seçeneklerin tam listesini görmek için komut satırına ndk-gdb --help yazın. Tablo 1'de, kısa açıklamaların yanı sıra daha yaygın olarak kullanılan bir dizi tablo gösterilmektedir.

Tablo 1. Yaygın ndk-gdb seçenekleri ve açıklamaları.

ndk-gdb bu seçenekle başlatıldığında, uygulama manifestinizde listelenen ilk başlatılabilir etkinlik başlatılır. Bir sonraki başlatılabilir etkinliği başlatmak için --launch=<name> uygulamasını kullanın. Başlatılabilir etkinliklerin listesini çıkarmak için komut satırından --launch-list öğesini çalıştırın.

Option Açıklama>
--lldb

Ayarlanırsa komut dosyası oturum için gdb yerine LLDB Hata Ayıklayıcı'yı kullanır.

--verbose

Bu seçenek, derleme sistemine, yerel hata ayıklama oturumu kurulumu hakkında ayrıntılı bilgi yazdırmasını bildirir. Yalnızca hata ayıklayıcı uygulamaya bağlanamadığında ve ndk-gdb tarafından görüntülenen hata mesajları yeterli olmadığında hata ayıklama sorunları için gereklidir.

--force Varsayılan olarak, ndk-gdb aynı cihazda başka bir yerel hata ayıklama oturumu çalıştırıldığını tespit ederse iptal edilir. Bu seçenek, diğer oturumu sonlandırır ve bunu yeni bir oturumla değiştirir. Bu seçeneğin, hata ayıklamakta olan gerçek uygulamayı sonlandırmadığını, ayrıca ayrı olarak sonlandırmanız gerektiğini unutmayın.
--start

ndk-gdb uygulamasını başlattığınızda varsayılan olarak uygulamanızın hedef cihazdaki çalışan mevcut bir örneğine eklenmeye çalışılır. Hata ayıklama oturumundan önce uygulamayı hedef cihazda açıkça başlatmak için --start kullanarak bu varsayılan davranışı geçersiz kılabilirsiniz.

--launch=<name>

Bu seçenek, --start uygulamasına benzer ancak uygulamanızdan belirli bir etkinlik başlatmanızı sağlar. Bu özellik yalnızca manifest dosyanız birden fazla başlatılabilir etkinlik tanımlıyorsa kullanışlıdır.

--launch-list

Bu kolaylık seçeneği, uygulama manifestinizde bulunan başlatılabilir tüm etkinlik adlarının listesini yazdırır. --start ilk etkinlik adını kullanır.

--project=<path> Bu seçenek, uygulama projesi dizinini belirtir. Komut dosyasını önce proje dizininde değiştirmek zorunda kalmadan başlatmak istiyorsanız kullanışlıdır.
--port=<port>

Varsayılan olarak ndk-gdb, hedef cihazda hata ayıklama işlemi gerçekleştirdiği uygulamayla iletişim kurmak için yerel TCP bağlantı noktası 5039'u kullanır. Farklı bir bağlantı noktası kullanarak farklı cihazlarda çalışan veya aynı ana makineye bağlı emülatörlerde yerel olarak hata ayıklayabilirsiniz.

--adb=<file>

Bu seçenek, yürütülebilir adb aracını belirtir. Yalnızca yolunuzu bu yürütülebilir dosyayı içerecek şekilde ayarlamadıysanız gerekir.

  • -d
  • -e
  • -s <serial>
  • Bu işaretler, aynı adlara sahip adb komutlarına benzer. Ana makinenize bağlı birkaç cihazınız veya emülatörleriniz varsa bu işaretleri ayarlayın. Bu kodların anlamları aşağıdaki gibidir:

    -d
    Tek bir fiziksel cihaza bağlanın.
    -e
    Tek bir emülatör cihaza bağlanma.
    -s <serial>
    Belirli bir cihaza veya emülatöre bağlanma. Burada <serial>, adb devices komutu tarafından listelenen cihaz adıdır.

    Alternatif olarak, ADB_SERIAL ortam değişkenini belirli bir seçeneğe gerek kalmadan belirli bir cihazı listelemek için tanımlayabilirsiniz.

  • --exec=<file>
  • -x <file>
  • Bu seçenek, ndk-gdb ürününe hata ayıklama işlemine bağlandıktan sonra <file> konumunda bulunan GDB başlatma komutlarını çalıştırmasını bildirir. Ayrılma noktaları listesi oluşturmak ve ardından yürütmeyi otomatik olarak devam ettirmek gibi tekrar tekrar bir şey yapmak istiyorsanız bu yararlı bir özelliktir.

    --nowait

    GDB bağlanana kadar Java kodunu duraklatmayı devre dışı bırak. Bu seçeneğin iletilmesi, hata ayıklayıcının erken ayrılma noktalarını kaçırmasına neden olabilir.

    --tui -t

    Metin Kullanıcı Arayüzünü (varsa) etkinleştirin.

    --gnumake-flag=<flag>

    Bu seçenek, proje bilgileri için sorgu ararken ndk-build sistemine iletilecek ekstra bir işarettir (veya işaretler). Aynı komutta bu seçeneğin birden fazla örneğini kullanabilirsiniz.

    Not: Bu tablodaki son üç seçenek yalnızca ndk-gdb ürününün Python sürümü içindir.

    Mesaj dizisi desteği

    Uygulamanız Android 2.3'ten (API düzeyi 9) eski bir platformda çalışıyorsa ndk-gdb yerel mesaj dizilerinde hata ayıklama işlemini doğru şekilde yapamaz. Hata ayıklayıcı yalnızca ana iş parçacığının hata ayıklamasını yapabilir. Abd diğer ileti dizilerinin yürütülmesini tamamen yoksayar.

    Ana olmayan bir iş parçacığında yürütülen bir işleve ayrılma noktası yerleştirirseniz programdan çıkış yapılır ve GDB aşağıdaki mesajı görüntüler:

    Program terminated with signal SIGTRAP, Trace/breakpoint trap.
          The program no longer exists.