Debuggen von Xamarin.iOS-Apps

Zum Debuggen von Xamarin.iOS-Anwendungen kann der integrierte Debugger in Visual Studio für Mac oder Visual Studio verwendet werden.

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.

Hinweis

Beim Kompilieren von Anwendungen im Debugmodus generiert Xamarin.iOS langsamere und viel größere Anwendungen, da jede Codezeile instrumentiert werden muss. Stellen Sie vor der Freigabe sicher, dass Sie einen Releasebuild ausführen.

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.

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. Dies ist anders als Hard-Debugger wie LLDB oder MDB, die ein Programm ohne das Wissen oder die Zusammenarbeit der debuggten Anwendung steuern.

Festlegen von Haltepunkten

Wenn Sie bereit sind, das Debuggen der Anwendung zu beginnen, legen Sie im ersten Schritt Haltepunkte für die Anwendung fest. Dies erfolgt durch Klicken in den Randbereich des Editors neben die Zeilennummer des Codes, den Sie unterbrechen möchten:

Sie können sich alle festgelegten Haltepunkte in Ihrem Code anzeigen lassen, indem Sie zum Pad für Haltepunkte navigieren:

Das Haltepunktpad

Wenn das Haltepunktpad nicht automatisch angezeigt wird, können Sie es sichtbar machen, indem Sie Debugfenster-Haltepunkte > anzeigen > auswählen.

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:

Debugging starten

Wählen Sie zum Starten des Debuggens das Zielgerät oder Ähnliches in Ihrer IDE:

Stellen Sie dann Ihre Anwendung bereit, indem Sie die Schaltfläche Wiedergabe drücken.

Wenn Sie einen Haltepunkt erreichen, wird der Code gelb hervorgehoben:

Der Code wird gelb hervorgehoben.

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:

Anzeigen eines Farbwerts

Bedingte Haltepunkte

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.

Um einen bedingten Haltepunkt festzulegen, greifen Sie auf die Breakpoint-Eigenschaftenfenster zu. Dies kann auf zwei Arten erfolgen:

  • 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“:

    Wählen Sie Neuen Haltepunkt aus.

  • Um einem vorhandenen Haltepunkt eine Bedingung hinzuzufügen, klicken Sie mit der rechten Maustaste auf den Haltepunkt, und wählen Sie Haltepunkteigenschaften aus, oder wählen Sie im Haltepunktpad die unten dargestellte Schaltfläche eigenschaften aus:

    Das Haltepunktpad

Anschließend können Sie die Bedingung eingeben, unter der der Haltepunkt auftreten soll:

Geben Sie die Bedingung für den Breakpoint ein.

Wenn ein Haltepunkt erreicht wird, gewähren Ihnen die Debugtools die Kontrolle über die Ausführung des Programms. Die IDE zeigt vier Schaltflächen an, die es Ihnen ermöglichen, den Code auszuführen oder Schritt für Schritt zu durchzugehen.

In Visual Studio für Mac sehen diese wie folgt aus:

Mit den Debugtools kann der Entwickler die Ausführung des Programms steuern.

Diese lauten wie folgt:

  • Wiedergabe/Anhalten: Dadurch wird die Ausführung des Codes gestartet oder angehalten, bis der nächste Haltepunkt erreicht wird.
  • Prozedurschritt: Dadurch wird die nächste Codezeile ausgeführt. 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.
  • Einzelschritt: Dadurch wird ebenfalls die nächste Codezeile ausgeführt. 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. Wenn die nächste Zeile keine Funktion ist, funktioniert diese Schaltfläche genauso wie der Prozedurschritt.
  • Rücksprung: Dadurch wird zu der Zeile zurückgekehrt, in der die aktuelle Funktion aufgerufen wurde.

Haltepunkte

Es ist wichtig, darauf hinzuweisen, dass iOS den Anwendungen nur wenige Sekunden (10) zum Start und Abschluss der FinishedLaunching-Methode im Anwendungsdelegaten gibt. Wenn die Anwendung diese Methode nicht innerhalb von 10 Sekunden abschließt, wird iOS den Prozess beenden.

Dies bedeutet, dass es beinahe unmöglich ist, Haltepunkte für den Startcode des Programms festzulegen. 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.

Gerätediagnose

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. Dadurch werden ausführliche Fehlerinformationen an die Konsole des Geräts übergeben.

Drahtloses Debuggen

Der Standardvorgang in Xamarin.iOS ist das Debuggen der Anwendung auf Ihren Geräten über die USB-Verbindung. 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. In diesen Fällen können Sie den Debugvorgang über das drahtlose Netzwerk durchführen.

Weitere Informationen zur drahtlosen Bereitstellen und zum drahtlosen Debuggen finden Sie im Leitfaden zur drahtlosen Bereitstellung.

Technische Details

Xamarin.iOS verwendet den neuen 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.

Beim Start kontaktiert eine Anwendung, die debuggt werden soll, den Debugger, und der Debugger wird gestartet. In Xamarin.iOS für Visual Studio fungiert der Xamarin Mac-Agent als Mittelsmann zwischen der Anwendung (in Visual Studio) und dem Debugger.

Dieser Soft-Debugger erfordert ein kooperatives Debugschema bei der Ausführung auf dem Gerät. 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.

Zugreifen auf die Konsole

Es werden Absturzprotokolle und die Ausgabe der Console-Klasse an die iPhone-Konsole gesendet. Sie können mit Xcode auf diese Konsole zugreifen. Verwenden Sie den „Organisator“, und wählen Sie Ihr Gerät aus.

Wenn Sie Xcode nicht starten möchten, können Sie alternativ das iPhone-Konfigurationsprogramm von Apple verwenden, um direkt auf die Konsole zuzugreifen. 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.

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.


Debuggen der Mono-Klassenbibliotheken

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.

Da dieses Feature während des Debuggens mehr Arbeitsspeicher benötigt, ist es standardmäßig deaktiviert.

Um dieses Feature zu aktivieren, stellen Sie sicher, dass die Option Nur Projektcode debuggen; Nicht in Frameworkcode ausführen im Menü Visual Studio für Mac > Einstellungsdebugger > deaktiviert ist, wie unten dargestellt:

Debuggen der Klassenbibliotheken von Mono

Sobald Sie dies tun, können Sie Ihre Anwendung und einen Einzelschritt in beliebigen Mono Core-Klassenbibliotheken starten.