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í:

  1. Ladění sestavení s povoleným rychlým nasazením
  2. Ladění sestavení se zakázaným rychlým nasazením
  3. 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.log vlastnost 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:

  1. Vyhledejte v androidu NDK (měl by být ve gdbservergdbserver) a zkopírujte ho do Project adresáře.

  2. gdbservergdbserver

  3. Přidejte soubor libs/armeida-v7a/libgdbserver.so do Project pomocí akce Sestavení s možností .

  4. 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:

  1. INTERNETOprávnění.
  2. Ladění aplikací povoleno.
  3. 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.