GDBGDB

PřehledOverview

Xamarin. Android 4,10 představil částečnou podporu pro použití pomocí gdb _Gdb cíle MSBuild.Xamarin.Android 4.10 introduced partial support for using gdb by using the _Gdb MSBuild target.

Poznámka

gdbPodpora vyžaduje, aby se nainstaloval Android NDK.gdb support requires that the Android NDK be installed.

Existují tři způsoby, jak použít gdb :There are three ways to use gdb:

  1. Ladění sestavení s povoleným rychlým nasazenímDebug builds with Fast Deployment enabled .
  2. Ladění sestavení pomocí rychlého nasazení je zakázané .Debug builds with Fast Deployment disabled .
  3. Sestavení vydaných verzíRelease builds .

Pokud dojde k chybě, přečtěte si část Poradce při potížích .When things go wrong, please see the Troubleshooting section.

Ladění sestavení pomocí rychlého nasazeníDebug Builds with Fast Deployment

Při sestavování a nasazování sestavení ladění s povoleným rychlým nasazením gdb lze připojit pomocí _Gdb cíle MSBuild.When building and deploying a Debug build with Fast Deployment enabled, gdb can be attached by using the _Gdb MSBuild target.

Nejdřív nainstalujte aplikaci.First, install the app. To lze provést prostřednictvím integrovaného vývojového prostředí (IDE) nebo pomocí příkazového řádku:This can be done via the IDE, or via the command line:

$ /Library/Frameworks/Mono.framework/Commands/xbuild /t:Install *.csproj

Za druhé spusťte _Gdb cíl.Secondly, run the _Gdb target. Na konci spuštění se gdb vytiskne příkazový řádek:At the end of execution, a gdb command line will be printed:

$ /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"
...

_GdbCíl spustí libovolnou spouštěcí aktivitu deklarovanou v AndroidManifest.xml souboru.The _Gdb target will launch an arbitrary launcher Activity declared within your AndroidManifest.xml file. Chcete-li explicitně určit, která aktivita se má spustit, použijte RunActivity vlastnost MSBuild.To explicitly specify which Activity to run, use the RunActivity MSBuild property. Spuštění služeb a jiné konstrukce pro Android se v tuto chvíli nepodporuje.Starting Services and other Android constructs is not supported at this time.

_GdbCíl vytvoří gdb-symbols adresář a zkopíruje obsah vašich cílů /system/lib a $APPDIR/lib adresářů.The _Gdb target will create a gdb-symbols directory and copy the contents of your target's /system/lib and $APPDIR/lib directories there.

Poznámka

Obsah gdb-symbols adresáře je vázaný na cíl Androidu, na který jste nasadili, a nebude automaticky nahrazen, pokud chcete změnit cíl.The contents of the gdb-symbols directory are tied to the Android target you deployed to, and will not be automatically replaced should you change the target. (Zvažte tuto chybu.) Pokud změníte cílovou zařízení s Androidem, budete muset tento adresář odstranit ručně.(Consider this a bug.) If you change Android target devices, you will need to manually delete this directory.

Nakonec zkopírujte vygenerovaný gdb příkaz a spusťte ho ve svém prostředí:Finally, copy the generated gdb command and execute it in your shell:

$ "/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íDebug Builds without Fast Deployment

Sestavujte sestavení s rychlým nasazením, a to zkopírováním programu Android NDK gdbserver do adresáře rychlého nasazení .__override__ .Debug builds with Fast Deployment operate by copying the Android NDK's gdbserver program into the Fast Deployment .__override__ directory. Pokud je zakázané rychlé nasazení, tento adresář možná neexistuje.When Fast Deployment is disabled, this directory may not exist.

Existují dvě alternativní řešení:There are two workarounds:

  • Nastavte debug.mono.log vlastnost systému tak, aby byl .__override__ adresář vytvořen.Set the debug.mono.log system property so that the .__override__ directory is created.
  • Zahrňte gdbserver do svého .apk .Include gdbserver within your .apk.

Nastavení debug.mono.log systémové vlastnostiSetting the debug.mono.log System Property

Chcete-li nastavit debug.mono.log vlastnost systému, použijte adb příkaz:To set the debug.mono.log system property, use the adb command:

$ adb shell setprop debug.mono.log gc

Po nastavení systémové vlastnosti spusťte _Gdb cíl a tištěný gdb příkaz, jako u sestavení pro ladění s konfigurací rychlého nasazení:Once the system property has been set, execute the _Gdb target and the printed gdb command, as with the Debug Builds with Fast Deployment configuration:

$ /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 aplikaceIncluding gdbserver in your app

Zahrnutí do gdbserver vaší aplikace:To include gdbserver within your app:

  1. Najděte gdbserver si ho v rámci Android NDK (měl by to být v $Android _ NDK _ cesta/předdefinovaná/Android-ARM/gdbserver/gdbserver) a zkopírujte ho do adresáře projektu.Find gdbserver within your Android NDK (it should be in $ANDROID_NDK_PATH/prebuilt/android-arm/gdbserver/gdbserver), and copy it into your Project directory.

  2. Přejmenujte gdbserver na knihovny/armeabi-v7a/libgdbserver.Rename gdbserver to libs/armeabi-v7a/libgdbserver.so.

  3. Přidejte knihovny/armeabi-v7a/libgdbserver. pro svůj projekt můžete použít akci sestavení AndroidNativeLibrary .Add libs/armeabi-v7a/libgdbserver.so to your Project with a Build action of AndroidNativeLibrary.

  4. Znovu sestavte a znovu nainstalujte svoji aplikaci.Rebuild and reinstall your application.

Po přeinstalaci aplikace spusťte _Gdb cíl a tištěný gdb příkaz stejně jako v případě ladění sestavení s konfigurací rychlého nasazení:Once the app has been reinstalled, execute the _Gdb target and the printed gdb command, as with the Debug Builds with Fast Deployment configuration:

$ /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íRelease Builds

gdbPodpora vyžaduje tři věci:gdb support requires three things:

  1. INTERNETOprávnění.The INTERNET permission.
  2. Ladění aplikace je povolené.App Debugging enabled.
  3. Přístupná gdbserver .An accessible gdbserver.

INTERNETOprávnění je ve výchozím nastavení povolené v ladicích aplikacích.The INTERNET permission is enabled by default in Debug apps. Pokud ještě není ve vaší aplikaci přítomna, můžete ji přidat buď úpravou vlastnosti/souboru AndroidManifest. XML , nebo úpravou vlastností projektu.If it is not already present in your application, you may add it either by editing Properties/AndroidManifest.xml or by editing the Project Properties.

Ladění aplikací lze povolit buď nastavením vlastnosti ApplicationAttribute. Debugging pro vlastní atribut na true , nebo úpravou vlastnosti/souboru AndroidManifest. XML a nastavením //application/@android:debuggable atributu na true :App debugging can be enabled by either setting the ApplicationAttribute.Debugging custom attribute property to true, or by editing Properties/AndroidManifest.xml and setting the //application/@android:debuggable attribute to true:

<application android:label="Example.Name.Here" android:debuggable="true">

K dispozici gdbserver může být přístup pomocí oddílu sestavení ladění bez rychlého nasazení .An accessible gdbserver may be provided by following the Debug Builds without Fast Deployment section.

Jedna Wrinkle: _Gdb cíl MSBuild ukončí všechny dřív spuštěné instance aplikace.One wrinkle: The _Gdb MSBuild target will kill any previously running app instances. Tato akce nebude fungovat na cílech starších než Android v 4.0.This will not work on pre-Android v4.0 targets.

Řešení potížíTroubleshooting

mono_pmipnefungujemono_pmip doesn't work

mono_pmipFunkce (užitečná pro získání spravovaných rámců zásobníku) je vyexportována z libmonosgen-2.0.so , který _Gdb cíl aktuálně neumožňuje vyčítat.The mono_pmip function (useful for obtaining managed stack frames) is exported from libmonosgen-2.0.so, which the _Gdb target does not currently pull down. (Tato akce bude opravena v budoucí verzi.)(This will be fixed in a future release.)

Pokud chcete povolit volání funkcí nacházejících libmonosgen-2.0.so se v, zkopírujte ji z cílového zařízení do gdb-symbols adresáře:To enable calling functions located in libmonosgen-2.0.so, copy it from the target device into the gdb-symbols directory:

$ adb pull /data/data/Mono.Android.DebugRuntime/lib/libmonosgen-2.0.so Project/gdb-symbols

Pak restartujte relaci ladění.Then restart your debugging session.

Chyba sběrnice: 10 při spuštění gdb příkazuBus error: 10 when running the gdb command

Po gdb chybě příkazu v systému "Bus error: 10" restartujte zařízení s Androidem.When the gdb command errors out with "Bus error: 10", restart the Android device.

$ "/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íNo stack trace after attach

$ "/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 Androidu.This is usually a sign that the contents of the gdb-symbols directory are not synchronized with your Android target. (Změnili jste cíl pro Android?)(Did you change your Android target?)

Odstraňte prosím gdb-symbols adresář a zkuste to znovu.Please delete the gdb-symbols directory and try again.