Debuggen von Xamarin.iOS-AppsDebugging Xamarin.iOS Apps

Zum Debuggen von Xamarin.iOS-Anwendungen kann der integrierte Debugger in Visual Studio für Mac oder Visual Studio verwendet werden.Xamarin.iOS applications can be debugged with the built-in debugger in Visual Studio for Mac or Visual Studio.

Verwenden Sie die native Debugunterstützung von Visual Studio für Mac zum Debuggen von C#-Code und Code anderer verwalteter Sprachen, und verwenden Sie LLDB, wenn Sie C-, C++- oder Objective-C-Code debuggen müssen, den Sie möglicherweise mit Ihrem Xamarin.iOS-Projekt verknüpfen.Use Visual Studio for Mac's native debugging support for debugging C# and other managed languages code and use LLDB when you need to debug C, C++ or Objective C codethat you might be linking with your Xamarin.iOS project.

Hinweis

Beim Kompilieren von Anwendungen im Debugmodus generiert Xamarin.iOS langsamere und viel größere Anwendungen, da jede Codezeile instrumentiert werden muss.When you compile applications in Debug mode, Xamarin.iOS will generate slower and much larger applications as every line of code must be instrumented. Stellen Sie vor der Freigabe sicher, dass Sie einen Releasebuild ausführen.Before releasing, make sure that you do a Release build.

Der Xamarin.iOS-Debugger ist in die IDE integriert und ermöglicht Entwicklern das Debuggen von Xamarin.iOS-Anwendungen im Simulator sowie auf dem Gerät. Diese Anwendungen wurden mit jeder beliebigen verwalteten Sprache erstellt, die von Xamarin.iOS unterstützt wird.The Xamarin.iOS debugger is integrated into your IDE and it allows developers to debug Xamarin.iOS applications built with any of the managed languages supported by Xamarin.iOS in the simulator and on the device.

Der Xamarin.iOS-Debugger verwendet den Mono Soft-Debugger, was bedeutet, dass der generierte Code und die Mono-Laufzeit mit der IDE zusammenarbeiten, um einen Debugvorgang zu gewährleisten.The Xamarin.iOS debugger uses the Mono Soft Debugger, which means that the generated code and the Mono runtime cooperate with the IDE to provide a debugging experience. Dies ist anders als Hard-Debugger wie LLDB oder MDB, die ein Programm ohne das Wissen oder die Zusammenarbeit der debuggten Anwendung steuern.This is different than hard debuggers like LLDB or MDB which control a program without the knowledge or cooperation from the debugged program.

Festlegen von HaltepunktenSetting Breakpoints

Wenn Sie bereit sind, das Debuggen der Anwendung zu beginnen, legen Sie im ersten Schritt Haltepunkte für die Anwendung fest.When you are ready to start debugging your application the first step is to set breakpoints your application. Dies erfolgt durch Klicken in den Randbereich des Editors neben die Zeilennummer des Codes, den Sie unterbrechen möchten:This is done by clicking in the margin area of the editor, next to the line number of code you want to break at:

Sie können sich alle festgelegten Haltepunkte in Ihrem Code anzeigen lassen, indem Sie zum Pad für Haltepunkte navigieren:You can view all the breakpoints that have been set in your code by going to the Breakpoints pad:

Das Pad „Breakpoints“The Breakpoints pad

Wenn das Pad für Haltepunkte nicht automatisch angezeigt wird, können Sie es sichtbar machen, indem Sie Folgendes auswählen: Ansicht > Debuggen > Fenster > HaltepunkteIf the Breakpoints pad does not display automatically, you can make it visible by selecting View > Debug Windows > Breakpoints

Bevor Sie das Debuggen einer Anwendung beginnen, stellen Sie immer sicher, dass die Konfiguration auf Debuggen festgelegt wurde. Dies enthält einen hilfreichen Satz von Tools zum Unterstützen des Debugvorgangs, z.B. Haltepunkte, Datenschnellansichten und eine Anzeige der Aufrufliste:Before you begin debugging any application, always ensure that the configuration is set to Debug, as this contains a helpful set of tools to support debugging such as breakpoints, using data visualizers, and viewing the call stack:

Debugging startenStart Debugging

Wählen Sie zum Starten des Debuggens das Zielgerät oder Ähnliches in Ihrer IDE:To start debugging, select the target device or similar in your IDE:

Stellen Sie Ihre Anwendung dann bereit, indem Sie auf die Schaltfläche Wiedergabe klicken.Then deploy your application by pressing the Play button.

Wenn Sie einen Haltepunkt erreichen, wird der Code gelb hervorgehoben:When you hit a breakpoint, the code will be highlighted yellow:

Der Code wird gelb hervorgehobenThe code will be highlighted yellow

Debugtools wie zum Beispiel das, was zur Überprüfung der Werte eines Objekts verwendet wurde, können an dieser Stelle verwendet werden, um weitere Informationen zu den Vorgängen in Ihrem Code zu erhalten:Debugging tools, such as inspecting the values of objects, can be used at this point to get more information about what is happening in your code:

Anzeigen eines FarbwertsDisplaying a color value

Bedingte HaltepunkteConditional Breakpoints

Sie können auch Regeln festlegen, durch die die Umstände bestimmt werden, unter denen ein Haltepunkt auftreten soll. Dies wird als das Hinzufügen eines bedingten Haltepunkts bezeichnet.You can also set rules dictating the circumstances under which a breakpoint should occur, this is know as adding a conditional breakpoint.

Greifen Sie auf das Fenster für Haltepunkteigenschaften zu, um einen bedingten Haltepunkt festzulegen. Dazu gibt es zwei Möglichkeiten:To set a conditional breakpoint, access the Breakpoint Properties window, which can be done in two ways:

  • Um einen neuen bedingten Haltepunkt hinzuzufügen, klicken Sie mit der rechten Maustaste links der Zeilennummer des Codes, an der Sie einen Haltepunkt setzen möchten, auf den Rand des Editors, und wählen Sie „Neuer Haltepunkt“:To add a new conditional breakpoint, right-click on the editor margin, to the left of the line number for the code you wish to set a breakpoint on, and select New Breakpoint:

    Auswählen der Option „Neuer Breakpoint“Select New Breakpoint

  • Klicken Sie mit der rechten Maustaste auf den Haltepunkt, und klicken Sie auf Haltepunkteigenschaften, oder wählen Sie im Pad für Haltepunkte die unten dargestellte Schaltfläche „Einstellungen“ aus, um eine Bedingung zu einem bestehenden Haltepunkt hinzuzufügen.To add a condition to an existing breakpoint, right-click on the breakpoint and select Breakpoint Properties or in the Breakpoints Pad select the properties button illustrated below:

    Das Pad „Breakpoints“The Breakpoints Pad

Anschließend können Sie die Bedingung eingeben, unter der der Haltepunkt auftreten soll:You can then enter the condition under which you want to breakpoint to occur:

Eingeben der Bedingung für den BreakpointEnter the condition for the breakpoint to occur

Wenn ein Haltepunkt erreicht wird, gewähren Ihnen die Debugtools die Kontrolle über die Ausführung des Programms.When a breakpoint has been reached, the Debug tools enable you to get control over the program’s execution. Die IDE zeigt vier Schaltflächen an, die es Ihnen ermöglichen, den Code auszuführen oder Schritt für Schritt zu durchzugehen.The IDE will display four buttons, allowing you to run and step through the code.

In Visual Studio für Mac sehen diese wie folgt aus:In Visual Studio for Mac they will look like the following:

Die Debugtools ermöglichen dem Entwickler die Kontrolle über die Ausführung des ProgrammsThe Debug tools enable the developer to get control over the program’s execution

Diese lauten wie folgt:These are:

  • Wiedergabe/Anhalten: Dadurch wird die Ausführung des Codes gestartet oder angehalten, bis der nächste Haltepunkt erreicht wird.Play/Stop – This will begin/stop executing the code, until the next breakpoint.
  • Prozedurschritt: Dadurch wird die nächste Codezeile ausgeführt.Step Over – This will execute the next line of code. Wenn die nächste Zeile ein Funktionsaufruf ist, wird der Prozedurschritt die Funktion ausführen und in der nächsten Codezeile nach der Funktion anhalten.If the next line is a function call, step over will execute the function, and will stop at the next line of code after the function.
  • Einzelschritt: Dadurch wird ebenfalls die nächste Codezeile ausgeführt.Step Into – This will also execute the next line of code. Wenn die nächste Zeile ein Funktionsaufruf ist, wird der Einzelschritt in der ersten Zeile der Funktion anhalten, wodurch Sie die Funktion dann Zeile für Zeile debuggen können.If the next line is a function call, Step Into will stop at the first line of the function, allowing you to continue line-by-line debugging of the function. Wenn die nächste Zeile keine Funktion ist, funktioniert diese Schaltfläche genauso wie der Prozedurschritt.If the next line is not a function, it will behave the same as Step Over.
  • Rücksprung: Dadurch wird zu der Zeile zurückgekehrt, in der die aktuelle Funktion aufgerufen wurde.Step Out – This will return to the line where the current function was called.

HaltepunkteBreakpoints

Es ist wichtig, darauf hinzuweisen, dass iOS den Anwendungen nur wenige Sekunden (10) zum Start und Abschluss der FinishedLaunching-Methode im Anwendungsdelegaten gibt.It is important to point out that the iOS gives applications only a handful of seconds (10) to startup and complete the FinishedLaunching method in the Application delegate. Wenn die Anwendung diese Methode nicht innerhalb von 10 Sekunden abschließt, wird iOS den Prozess beenden.If the application does not complete this method in 10 seconds, then iOS will kill the process.

Dies bedeutet, dass es beinahe unmöglich ist, Haltepunkte für den Startcode des Programms festzulegen.This means that it is almost impossible to set breakpoints on the startup code of your program. Wenn Sie den Startcode debuggen möchten, sollten Sie einen Teil der Initialisierung verzögern und in einer durch den Timer aufgerufenen Methode oder in einer anderen Form der Rückrufmethode ausführen, die ausgeführt wird, nachdem FinishedLaunching beendet wurde.If you want to debug your startup code, you should delay some of its initialization and put that into a timer-invoked method, or in some other form of callback method that is executed after FinishedLaunching has terminated.

GerätediagnoseDevice Diagnostics

Wenn beim Einrichten des Debuggers ein Fehler auftritt, können Sie eine detaillierte Diagnose aktivieren, indem Sie „-v -v -v“ zu den zusätzlichen Mtouch-Argumenten in den Projektoptionen hinzufügen.If there is an error setting up the debugger, you can enable detailed diagnostics by adding "-v -v -v" to the additional mtouch arguments in your Project Options. Dadurch werden ausführliche Fehlerinformationen an die Konsole des Geräts übergeben.This will print detailed error information to the device console.

Drahtloses DebuggenWireless Debugging

Der Standardvorgang in Xamarin.iOS ist das Debuggen der Anwendung auf Ihren Geräten über die USB-Verbindung.The default in Xamarin.iOS is to debug your application on your devices over the USB connection. In einigen Fällen ist das USB-Gerät möglicherweise erforderlich, um das Einstecken/Ausstecken des Kabels für die Entwicklung von mit ExternalAccessory unterstützten Anwendungen zu testen.Sometimes the USB device might be needed to test plugging/unplugging of the cable for developing ExternalAccessory-powered applications. In diesen Fällen können Sie den Debugvorgang über das drahtlose Netzwerk durchführen.In those cases, you can use debugging over the wireless network.

Weitere Informationen zur drahtlosen Bereitstellen und zum drahtlosen Debuggen finden Sie im Leitfaden zur drahtlosen Bereitstellung.For more information on Wireless Deployment and Debugging, refer to the Wireless Deployment guide.

Technische DetailsTechnical Details

Xamarin.iOS verwendet den neuen Mono Soft-Debugger.Xamarin.iOS uses the new Mono soft debugger. Im Gegensatz zum Mono-Standarddebugger, einem Programm, das einen separaten Prozess mithilfe von Betriebssystemschnittstellen für die Steuerung von separaten Prozessen steuert, funktioniert der Soft-Debugger, indem die Mono-Laufzeit die Debuggingfunktionen über ein Versandprotokoll verfügbar macht.Unlike the standard Mono debugger which is a program that controls a separate process by using operating system interfaces to control a separate process, the soft debugger works by having the Mono runtime expose the debugging functionality through a wire protocol.

Beim Start kontaktiert eine Anwendung, die debuggt werden soll, den Debugger, und der Debugger wird gestartet.On startup, an application that is to be debugged contacts the debugger and the debugger starts to operate. In Xamarin.iOS für Visual Studio fungiert der Xamarin Mac-Agent als Mittelsmann zwischen der Anwendung (in Visual Studio) und dem Debugger.In Xamarin.iOS for Visual Studio, the Xamarin Mac Agent acts as the middle-man between the application (in Visual Studio) and the debugger.

Dieser Soft-Debugger erfordert ein kooperatives Debugschema bei der Ausführung auf dem Gerät.This soft debugger requires a cooperative debugging scheme when running on the device. Dies bedeutet, dass die Binärbuilds beim Debuggen größer sein werden als der Code. Dieser ist dazu instrumentiert, an jedem Sequenzpunkt zusätzlichen Code zur Debugunterstützung zu enthalten.This means that your binary builds when debugging will be larger as the code is instrumented to contain extra code at every sequence point to support debugging.

Zugreifen auf die KonsoleAccessing the Console

Es werden Absturzprotokolle und die Ausgabe der Console-Klasse an die iPhone-Konsole gesendet.Crash logs and the output of the Console class will be sent to the iPhone console. Sie können mit Xcode auf diese Konsole zugreifen. Verwenden Sie den „Organisator“, und wählen Sie Ihr Gerät aus.You can access this console with Xcode using the "Organizer" and selecting your device from the organizer.

Wenn Sie Xcode nicht starten möchten, können Sie alternativ das iPhone-Konfigurationsprogramm von Apple verwenden, um direkt auf die Konsole zuzugreifen.Alternatively, if you do not want to start up Xcode, you can use the Apple's iPhone Configuration Utility to directly access the console. Dies hat den zusätzlichen Vorteil, dass Sie von einem Windows-Computer aus auf Konsolenprotokolle zugreifen können, wenn Sie ein Problem im Feld debuggen.This has the added bonus that you can access the console logs from a Windows machine if you are debugging a problem in the field.

Für Visual Studio-Benutzer stehen einige Protokolle im Ausgabefenster zur Verfügung, aber für gründlichere und ausführlichere Protokolle sollten Sie zu Ihrem Mac wechseln.For Visual Studio users, there are a few logs available in the Output window, but you should switch over to your Mac for more thorough and detailed logs.


Debuggen der Mono-KlassenbibliothekenDebugging Mono's Class Libraries

Xamarin.iOS enthält den Quellcode für die Mono-Klassenbibliotheken, die Sie verwenden können, um in einem einzigen Schritt vom Debugger zu einer Überprüfung der Vorgänge im Hintergrund zu gelangen.Xamarin.iOS ships with the source code for Mono's class libraries, and you can use this to single step from the debugger to see how things are working under the hood.

Da dieses Feature während des Debuggens mehr Arbeitsspeicher benötigt, ist es standardmäßig deaktiviert.Since this feature consumes more memory during debugging, this is turned off by default.

Um dieses Feature zu aktivieren, stellen Sie sicher, dass die Option Nur Projektcode debuggen, keinen Einzelschritt in Frameworkcode ausführen im Menü Visual Studio für Mac > Einstellungen > Debugger deaktiviert ist, wie unten gezeigt:To enable this feature, make sure the Debug project code only; do not step into framework code option is deselected under the Visual Studio for Mac > Preferences > Debugger menu as illustrated below:

Debuggen der Mono-KlassenbibliothekenDebugging Mono's Class Libraries

Sobald Sie dies tun, können Sie Ihre Anwendung und einen Einzelschritt in beliebigen Mono Core-Klassenbibliotheken starten.Once you do this, you can start your application and single step into any of Mono's core class libraries.