GDB
Přehled
Xamarin.Android 4.10 zavedl částečnou podporu použití pomocí MSBuild gdb_Gdb cíle.
Poznámka
gdb Podpora vyžaduje instalaci Androidu NDK.
Existují tři způsoby gdb použití:
- Ladění sestavení s povoleným rychlým nasazením
- Ladění sestavení se zakázaným rychlým nasazením
- Sestavení pro vydání .
Pokud se něco pokazí, přečtěte si část Řešení potíží.
Ladění sestavení s rychlým nasazením
Při sestavování a nasazování sestavení pro ladění s povoleným rychlým nasazením je možné připojit pomocí MSBuild gdb_Gdb nasazení.
Nejprve nainstalujte aplikaci. Můžete to provést prostřednictvím integrovaného vývojového prostředí (IDE) nebo pomocí příkazového řádku:
$ /Library/Frameworks/Mono.framework/Commands/xbuild /t:Install *.csproj
Za druhé spusťte _Gdb cíl. Na konci provádění se gdb zobrazí 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 rámci AndroidManifest.xml vašeho souboru. Pokud chcete explicitně určit, která aktivita se má spustit, RunActivity použijte MSBuild vlastnost. Spouštění služeb a dalších konstruktorů Androidu se v tuto chvíli nepodporuje.
Cíl vytvoří adresář a zkopíruje obsah cílových _Gdb adresářů a do tohoto gdb-symbols/system/lib$APPDIR/lib adresáře.
Poznámka
Obsah adresáře je svázán s cílem Androidu, do které jste nasadili, a v případě změny cíle se automaticky gdb-symbols nenahrazovat. (Představte si to jako 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 ve svém 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í
Sestavení pro ladění s rychlým nasazením fungují tak, že program Androidu NDK zkopírujete do adresáře Rychlé .__override__ nasazení. Pokud je funkce Rychlé nasazení zakázaná, nemusí tento adresář existovat.
Existují dvě alternativní řešení:
- Nastavte
debug.mono.logvlastnost system tak, aby se adresář.__override__vytvořil. gdbserverZahrnte do souboru.apk.
Nastavení debug.mono.log systémové vlastnosti
K nastavení debug.mono.log systémové vlastnosti použijte příkaz adb :
$ adb shell setprop debug.mono.log gc
Po nastavení systémové vlastnosti spusťte cíl a vytištěný příkaz stejně jako v konfiguraci Ladit sestavení _Gdbgdb s rychlým nasazením:
$ /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
Zahrnutí gdbserver do aplikace:
Vyhledejte v androidu NDK (měl by být ve
gdbservergdbserver) a zkopírujte ho do Project adresáře.gdbservergdbserverPřidejte soubor libs/armeida-v7a/libgdbserver.so do Project pomocí akce Sestavení s možností .
Znovu sestavte a znovu nainstalujte aplikaci.
Po přeinstalaci aplikace spusťte cíl a vytištěný příkaz stejně jako v konfiguraci Ladit sestavení s _Gdbgdb rychlým nasazením:
$ /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:
INTERNETOprávnění.- Ladění aplikací povoleno.
- Přístupná třída
gdbserver.
Oprávnění INTERNET je ve výchozím nastavení povolené v části Ladění aplikací. Pokud aplikace ještě není k dispozici, můžete ji přidat úpravou vlastností/vlastností AndroidManifest.xml úpravou vlastnosti Project .
Ladění aplikací je možné povolit buď nastavením vlastnosti vlastního atributu ApplicationAttribute.Debugging na , nebo úpravou vlastností/AndroidManifest.xml a nastavením atributu na true :
<application android:label="Example.Name.Here" android:debuggable="true">
Přístupná gdbserver může být k dispozici v části Sestavení pro ladění bez gdbserver nasazení.
Jeden z nich: _Gdb MSBuild cílový objekt všechny dříve spuštěné instance aplikace. U cílů před Androidem verze 4.0 to nebude fungovat.
Poradce při potížích
mono_pmip Nefunguje
Funkce mono_pmip (užitečná mono_pmipse exportuje z , což cíl v současné době libmonosgen-2.0.so_Gdb nepřitáhne. (Tato chyba bude opravena v budoucí verzi.)
Pokud chcete povolit volající funkce umístěné v libmonosgen-2.0.so , zkopírujte ho z cílového zařízení do gdb-symbols adresáře :
$ adb pull /data/data/Mono.Android.DebugRuntime/lib/libmonosgen-2.0.so Project/gdb-symbols
Pak restartujte relaci ladění.
Chyba sběrnice: 10 při spuštění gdb příkazu
Pokud příkaz gdb vypadne s "Bus error: 10" příkazem , 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 známku toho, že obsah adresáře není gdb-symbols synchronizovaný s cílem Androidu. (Změnili jste cíl androidu?)
Odstraňte adresář gdb-symbols a zkuste to znovu.