Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Genel bakış
Xamarin.Android 4.10, MSBuild hedefini kullanarak kullanımı gdb için _Gdb kısmi destek kullanıma sunulmuştur.
Not
gdb desteği, Android NDK'nin yüklenmesini gerektirir.
kullanmanın gdbüç yolu vardır:
- Hızlı Dağıtım özellikli derlemelerde hata ayıklama.
- Hızlı Dağıtım devre dışı bırakılmış derlemelerde hata ayıklama.
- Yayın derlemeleri .
Sorun oluştuğunda lütfen Sorun Giderme bölümüne bakın.
Hızlı Dağıtım ile Derlemelerde Hata Ayıklama
Hızlı Dağıtım etkin bir Hata Ayıklama derlemesi oluştururken ve dağıtırken, gdb MSBuild hedefi kullanılarak _Gdb eklenebilir.
İlk olarak uygulamayı yükleyin. Bu, IDE aracılığıyla veya komut satırı aracılığıyla yapılabilir:
$ /Library/Frameworks/Mono.framework/Commands/xbuild /t:Install *.csproj
İkinci olarak, hedefi çalıştırın _Gdb . Yürütmenin sonunda bir gdb komut satırı yazdırılır:
$ /Library/Frameworks/Mono.framework/Commands/xbuild /t:_Gdb *.csproj
...
Target _Gdb:
"/opt/android/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-gdb" -x "/Users/jon/Development/Projects/Scratch.HelloXamarin20//gdb-symbols/gdb.env"
...
Hedef, _Gdb dosyanızda AndroidManifest.xml bildirilen rastgele bir başlatıcı Etkinliği başlatır. Hangi Etkinliğin çalıştırılacağını açıkça belirtmek için MSBuild özelliğini kullanın RunActivity . Hizmetleri ve diğer Android yapılarını başlatmak şu anda desteklenmiyor.
Hedef _Gdb bir gdb-symbols dizin oluşturur ve hedefinizin /system/lib ve $APPDIR/lib dizinlerinizin içeriğini oraya kopyalar.
Not
Dizinin içeriği gdb-symbols dağıtılan Android hedefine bağlıdır ve hedefi değiştirmeniz durumunda otomatik olarak değiştirilmez. (Bunu bir hata olarak düşünün.) Android hedef cihazlarını değiştirirseniz bu dizini el ile silmeniz gerekir.
Son olarak, oluşturulan gdb komutu kopyalayın ve kabuğunuzda yürütür:
$ "/opt/android/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-gdb" -x "/Users/jon/Development/Projects/Scratch.HelloXamarin20//gdb-symbols/gdb.env"
GNU gdb (GDB) 7.3.1-gg2
...
(gdb) bt
#0 0x40082e84 in nanosleep () from /Users/jon/Development/Projects/Scratch.HelloXamarin20/gdb-symbols/libc.so
#1 0x4008ffe6 in sleep () from /Users/jon/Development/Projects/Scratch.HelloXamarin20/gdb-symbols/libc.so
#2 0x74e46240 in ?? ()
#3 0x74e46240 in ?? ()
(gdb) c
Hızlı Dağıtım Olmadan Derlemelerde Hata Ayıklama
Hızlı Dağıtım ile derlemelerde hata ayıklama, Android NDK'nin gdbserver programını Hızlı Dağıtım .__override__ dizinine kopyalayarak çalışır. Hızlı Dağıtım devre dışı bırakıldığında, bu dizin mevcut olmayabilir.
İki geçici çözüm vardır:
debug.mono.logSistem özelliğini dizinin oluşturulacak şekilde.__override__ayarlayın.- içine
.apkekleyingdbserver.
debug.mono.log Sistem Özelliğini Ayarlama
Sistem özelliğini ayarlamak debug.mono.log için komutunu adb kullanın:
$ adb shell setprop debug.mono.log gc
Sistem özelliği ayarlandıktan sonra, Hızlı Dağıtım ile Derleme hatalarını ayıklama yapılandırmasında olduğu gibi hedefi ve yazdırılan gdb komutu yürütebilirsiniz_Gdb:
$ /Library/Frameworks/Mono.framework/Commands/xbuild /t:_Gdb *.csproj
...
Target _Gdb:
"/opt/android/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-gdb" -x "/Users/jon/Development/Projects/Scratch.HelloXamarin20//gdb-symbols/gdb.env"
...
$ "/opt/android/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-gdb" -x "/Users/jon/Development/Projects/Scratch.HelloXamarin20//gdb-symbols/gdb.env"
GNU gdb (GDB) 7.3.1-gg2
...
(gdb) c
Uygulamanıza dahil gdbserver
Uygulamanızın içine eklemek gdbserver için:
Android NDK'nizin içinde bulun
gdbserver($ANDROID_NDK_PATH/prebuilt/android-arm/gdbserver/gdbserver içinde olmalıdır) ve project dizininize kopyalayın.libs/armeabi-v7a/libgdbserver.so olarak yeniden adlandırın
gdbserver.Derleme eylemiyle
AndroidNativeLibraryprojenize libs/armeabi-v7a/libgdbserver.so ekleyin.Uygulamanızı yeniden derleyin ve yeniden yükleyin.
Uygulama yeniden yüklendikten sonra, Hızlı Dağıtım ile Derlemelerde Hata Ayıklama yapılandırmasında olduğu gibi hedefi ve yazdırılan gdb komutu yürütebilirsiniz_Gdb:
$ /Library/Frameworks/Mono.framework/Commands/xbuild /t:_Gdb *.csproj
...
Target _Gdb:
"/opt/android/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-gdb" -x "/Users/jon/Development/Projects/Scratch.HelloXamarin20//gdb-symbols/gdb.env"
...
$ "/opt/android/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-gdb" -x "/Users/jon/Development/Projects/Scratch.HelloXamarin20//gdb-symbols/gdb.env"
GNU gdb (GDB) 7.3.1-gg2
...
(gdb) c
Yayın Derlemeleri
gdb destek için üç şey gerekir:
- İzin
INTERNET. - Uygulama Hata Ayıklama etkinleştirildi.
- Erişilebilir
gdbserverbir .
INTERNET İzin, Hata ayıklama uygulamalarında varsayılan olarak etkindir. Uygulamanızda henüz yoksa, Özellikler/AndroidManifest.xml düzenleyerek veya Proje Özelliklerini düzenleyerek ekleyebilirsiniz.
Uygulama hata ayıklama, ApplicationAttribute.Debugging özel özniteliği özelliği olarak trueayarlanarak veya Özellikler/AndroidManifest.xml düzenlenerek ve özniteliği trueolarak //application/@android:debuggable ayarlanarak etkinleştirilebilir:
<application android:label="Example.Name.Here" android:debuggable="true">
Hızlı Dağıtım Olmadan Derlemelerde Hata Ayıklama bölümü izlenerek erişilebilir gdbserver bir kaynak sağlanabilir.
Bir kırışıklık: _Gdb MSBuild hedefi, daha önce çalışan tüm uygulama örneklerini öldürür. Bu, Android öncesi v4.0 hedeflerinde çalışmaz.
Sorun giderme
mono_pmip çalışmıyor
mono_pmip İşlev (yönetilen yığın çerçeveleri elde etmek için kullanışlıdır), hedef tarafından şu anda aşağı çekilmeyen 'den libmonosgen-2.0.so_Gdb dışarı aktarılır. (Bu, gelecek bir sürümde düzeltilecektir.)
içinde libmonosgen-2.0.sobulunan çağrı işlevlerini etkinleştirmek için hedef cihazdan dizinine gdb-symbols kopyalayın:
$ adb pull /data/data/Mono.Android.DebugRuntime/lib/libmonosgen-2.0.so Project/gdb-symbols
Ardından hata ayıklama oturumunuzu yeniden başlatın.
Bus hatası: Komutu çalıştırırken gdb 10
gdb komutunda "Bus error: 10"hata olduğunda Android cihazını yeniden başlatın.
$ "/path/to/arm-linux-androideabi-gdb" -x "Project/gdb-symbols/gdb.env"
GNU gdb (GDB) 7.3.1-gg2
Copyright (C) 2011 Free Software Foundation, Inc.
...
Bus error: 10
$
Eklemeden sonra yığın izlemesi yok
$ "/path/to/arm-linux-androideabi-gdb" -x "Project/gdb-symbols/gdb.env"
GNU gdb (GDB) 7.3.1-gg2
Copyright (C) 2011 Free Software Foundation, Inc.
...
(gdb) bt
No stack.
Bu genellikle dizinin içeriğinin gdb-symbols Android hedefinizle eşitlenmediğini gösteren bir işarettir. (Android hedefinizi değiştirdiniz mi?)
Lütfen dizini silin gdb-symbols ve yeniden deneyin.