GDB
Přehled
Xamarin.Android 4.10 zavedl částečnou podporu pro použití gdb
pomocí _Gdb
cíle NÁSTROJE MSBuild.
Poznámka:
gdb
podpora vyžaduje instalaci sady Android NDK.
Existují tři způsoby použití gdb
:
- Ladění buildů s povoleným rychlým nasazením
- Ladění buildů se zakázaným rychlým nasazením
- Vydané buildy .
Pokud se něco pokazí, projděte si část Řešení potíží .
Ladění sestavení s využitím rychlého nasazení
Při sestavování a nasazování sestavení ladění s povoleným gdb
rychlým nasazením je možné ho připojit pomocí _Gdb
cíle NÁSTROJE MSBuild.
Nejprve nainstalujte aplikaci. Můžete to provést prostřednictvím integrovaného vývojového prostředí (IDE) nebo přes příkazový řádek:
$ /Library/Frameworks/Mono.framework/Commands/xbuild /t:Install *.csproj
Za druhé spusťte _Gdb
cíl. Na konci spuštění gdb
se vytiskne příkazový řádek:
$ /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"
...
Cíl _Gdb
spustí libovolnou aktivitu spouštěče deklarovanou v souboru AndroidManifest.xml
. Chcete-li explicitně určit, která aktivita se má spustit, použijte RunActivity
vlastnost MSBuild. Spuštění služeb a dalších konstruktorů Androidu se v tuto chvíli nepodporuje.
Cíl _Gdb
vytvoří gdb-symbols
adresář a zkopíruje obsah adresářů a $APPDIR/lib
adresářů cíle/system/lib
.
Poznámka:
Obsah gdb-symbols
adresáře je svázaný s cílem Androidu, na který jste nasadili, a nebude automaticky nahrazen, pokud změníte cíl. (Zvažte tuto chybu.) Pokud změníte cílová zařízení s Androidem, budete muset tento adresář odstranit ručně.
Nakonec zkopírujte vygenerovaný gdb
příkaz a spusťte ho v prostředí:
$ "/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
Ladění sestavení bez rychlého nasazení
Ladění buildů s rychlým nasazením funguje zkopírováním programu sady Android NDK gdbserver
do adresáře Rychlé nasazení .__override__
. Pokud je rychlé nasazení zakázané, nemusí tento adresář existovat.
Existují dvě alternativní řešení:
- Nastavte systémovou
debug.mono.log
vlastnost tak, aby.__override__
byl adresář vytvořen. - Zahrnout
gdbserver
do svého.apk
.
debug.mono.log
Nastavení systémové vlastnosti
K nastavení debug.mono.log
systémové vlastnosti použijte adb
příkaz:
$ adb shell setprop debug.mono.log gc
Jakmile je vlastnost systému nastavená, spusťte _Gdb
cíl a tištěný gdb
příkaz jako u sestavení ladění s konfigurací Rychlé nasazení:
$ /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
Zahrnutí gdbserver
do aplikace
gdbserver
Zahrnutí do aplikace:
Vyhledejte
gdbserver
sadu Android NDK (měla by být v $ANDROID_NDK_PATH/prebuilt/android-arm/gdbserver/gdbserver/gdbserver) a zkopírujte ji do adresáře Projectu.Přejmenujte
gdbserver
na libs/armeabi-v7a/libgdbserver.so.Přidejte do projektu libs/armeabi-v7a/libgdbserver.so pomocí akce
AndroidNativeLibrary
sestavení .Znovu sestavte a znovu nainstalujte aplikaci.
Po přeinstalaci aplikace spusťte _Gdb
cíl a tištěný gdb
příkaz jako u sestavení ladění s konfigurací Rychlé nasazení:
$ /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
Sestavení pro vydání
gdb
podpora vyžaduje tři věci:
- Oprávnění
INTERNET
. - Ladění aplikací je povolené.
- Přístupná
gdbserver
.
Oprávnění INTERNET
je ve výchozím nastavení povolené v ladicích aplikacích. Pokud v aplikaci ještě není, můžete ji přidat úpravou vlastností/AndroidManifest.xml nebo úpravou vlastností projektu.
Ladění aplikací lze povolit nastavením vlastnosti vlastního atributu ApplicationAttribute.Debugging na true
hodnotu nebo úpravou vlastností/AndroidManifest.xml a nastavením atributu //application/@android:debuggable
na true
:
<application android:label="Example.Name.Here" android:debuggable="true">
Přístupný přístup gdbserver
může být poskytován pomocí ladění buildů bez rychlého nasazení oddílu.
Jedna vráska: _Gdb
Cíl NÁSTROJE MSBuild zabije všechny dříve spuštěné instance aplikace. Nebude to fungovat na cílech před Androidem verze 4.0.
Řešení problému
mono_pmip
Nefunguje
Funkce mono_pmip
(užitečná pro získání rámců spravovaného zásobníku) se exportuje z , ze libmonosgen-2.0.so
které _Gdb
cíl aktuálně nepřetáhne. (To bude opraveno v budoucí verzi.)
Pokud chcete povolit volání funkcí umístěných v libmonosgen-2.0.so
adresáři, zkopírujte je z cílového gdb-symbols
zařízení do adresáře:
$ adb pull /data/data/Mono.Android.DebugRuntime/lib/libmonosgen-2.0.so Project/gdb-symbols
Potom restartujte ladicí relaci.
Chyba sběrnice: 10 při spuštění gdb
příkazu
Když příkaz dojde k gdb
chybě, "Bus error: 10"
restartujte zařízení s Androidem.
$ "/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
$
Žádné trasování zásobníku po připojení
$ "/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.
Obvykle se jedná o znaménko, že obsah gdb-symbols
adresáře není synchronizovaný s vaším cílem pro Android. (Změnili jste cíl Androidu?)
Odstraňte gdb-symbols
adresář a zkuste to znovu.