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'daki hata ayıklama dokümanlarını okumalıdır.

Şartlar

Komut satırında yerel hata ayıklamanın çalışması için şu gereksinimlerin karşılanması gerekir:

  • ndk-build komut dosyasını kullanarak uygulamanızı derleyin. 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ıklamasını etkinleştirin.
  • Uygulamanızı Android 2.2 (Android API düzeyi 8) veya sonraki bir sürümde çalışacak şekilde oluşturun.
  • Android 2.2 veya sonraki sürümleri çalıştıran bir cihazda ya da emülatörde hata ayıklayın. Hata ayıklama açısından 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 bunun altındaki herhangi bir dizine geçin. Örneğin:

cd $PROJECT
$NDK/ndk-gdb

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

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

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

ndk-gdb ile GNU GDB ile aynı şekilde etkileşimde bulunursunuz. Örneğin, kesme noktaları ayarlamak için b <location> ve yürütmeyi devam ettirmek için c ("devam" için) kullanılabilir. Kapsamlı komut listesi için GDB kılavuzuna bakın. LLDB Debugger'ı kullanmayı tercih ederseniz ndk-gdb komut dosyasını çağırırken --lldb seçeneğini kullanın.

GDB isteminden çıktığınızda, hata ayıklamakta olduğunuz uygulama işleminin duracağını unutmayın. Bu davranış bir gdb sınırlamasıdır.

ndk-gdb, birçok hata koşulunu yönetir ve bir sorun bulursa bilgilendirici bir hata mesajı görüntüler. Bu kontroller, aşağıdaki koşulların yerine getirildiğinden emin olmayı içerir:

  • ADB'nin yolunuzda olup olmadığını kontrol eder.
  • Uygulamanızın, manifest dosyasında hata ayıklaması yapılabilir olarak tanımlanıp tanımlanmadığını kontrol eder.
  • Cihazda, aynı paket adına sahip yüklü uygulamanın da hata ayıklamaya uygun olup olmadığını kontrol eder.

Varsayılan olarak ndk-gdb, çalışan bir uygulama işlemini arar ve bulamazsa hata görüntüler. Ancak 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 yaygın şekilde kullanılan bazı yöntemler kısa açıklamalarla birlikte gösterilmektedir.

Tablo 1. Sık kullanılan ndk-gdb seçenekleri ve açıklamaları.

ndk-gdb bu seçenek belirtilerek 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> öğesini kullanın. Başlatılabilir etkinliklerin listesinin dökümünü almak için komut satırından --launch-list komutunu çalıştırın.

Option Açıklama>
--lldb

Ayarlanırsa komut dosyası, oturum için gdb yerine LLDB Hata Ayıklayıcısını kullanır.

--verbose

Bu seçenek, derleme sistemine yerel hata ayıklama oturumu kurulumuyla ilgili ayrıntılı bilgileri 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 sorunları ayıklamak için gereklidir.

--force Varsayılan olarak ndk-gdb, aynı cihazda başka bir yerel hata ayıklama oturumunun çalıştığını tespit ederse işlemi iptal eder. Bu seçenek diğer oturumu sonlandırır ve yeni bir oturumla değiştirir. Bu seçeneğin, hata ayıklaması yapılan asıl uygulamayı kaldırmadığını ve bu uygulamanın ayrı olarak sonlandırılması gerektiğini unutmayın.
--start

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

--launch=<name>

Bu seçenek, uygulamanızdan belirli bir etkinlik başlatmanıza olanak tanıması dışında --start ile benzerdir. Bu özellik yalnızca manifestinizde birden fazla başlatılabilir etkinlik tanımlanıyorsa kullanışlıdır.

--launch-list

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

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

ndk-gdb varsayılan olarak hedef cihazda hata ayıkladığı uygulamayla iletişim kurmak için yerel TCP bağlantı noktası 5039'u kullanır. Farklı bağlantı noktası kullanmak, farklı cihazlarda veya aynı ana makine makinesine bağlı emülatörlerde çalışan programlarda yerel olarak hata ayıklamanızı sağlar.

--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 belirlemediyseniz gereklidir.

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

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

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

  • --exec=<file>
  • -x <file>
  • Bu seçenek, ndk-gdb aracına hata ayıkladığı işleme bağlandıktan sonra <file> içinde bulunan GDB başlatma komutlarını çalıştırmasını bildirir. Bir kesme noktası listesi oluşturup ardından yürütmeyi otomatik olarak devam ettirmek gibi bir işlemi tekrar tekrar 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 kesme noktalarını atlamasına neden olabilir.

    --tui -t

    Metin Kullanıcı Arayüzü'nü etkinleştirin (kullanılabiliyorsa).

    --gnumake-flag=<flag>

    Bu seçenek, proje bilgileri için sorgulanırken 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'in Python sürümü içindir.

    İleti dizisi desteği

    Uygulamanız Android 2.3'ten (API düzeyi 9) daha eski bir platformda çalışıyorsa ndk-gdb, yerel iş parçacıklarında doğru şekilde hata ayıklama yapamaz. Hata ayıklayıcı yalnızca ana iş parçacığında hata ayıklayabilir. Abd, diğer iş parçacıklarının 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 program çıkar ve GDB aşağıdaki mesajı görüntüler:

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