Xcode und Advanced Debugging in LLDB: Teil 2

Ursprünglicher Autor: Fady Derias
  • Übersetzung
  • Tutorial
Guten Tag, heute mache ich Sie auf den zweiten Teil des Artikels zum Debuggen von Anwendungen in LLDB aufmerksam.

Im ersten Teil haben wir herausgefunden, wie Haltepunkte in Xcode verwendet werden, um vorhandene Eigenschaften von Variablen zu ändern und eine Codezeile über Anweisungsbefehle hinzuzufügen.

Ich habe absichtlich ein Demo-Projekt mit ein paar Fehlern erstellt, um herauszufinden, wie verschiedene Arten von Haltepunkten in LLDB zum Debuggen der Anwendung verwendet werden.

Wenn Sie den ersten Teil des Artikels noch nicht gelesen haben, ist es besser, mit ihm zu beginnen. Ich möchte Sie an eine wichtige Regel in diesem Tutorial erinnern: Bis zum Ende dieses Artikels stoppen Sie den Compiler nicht und starten die Anwendung nach dem ersten Start nicht neu. Sie korrigieren Fehler bei der Programmausführung.

Beobachtungspunkte

Also, der folgende Fehler in der Anwendung:

3. Sie können Beiträge mehr als 7 Mal laden.

So reproduzieren Sie den Fehler:

  • Schalten Sie das Internet auf Ihrem iPhone / Simulator ein
  • Scrollen Sie zum Ende der Tabelle, um weitere Beiträge zu laden.
  • Sie können Posts mehr als sieben Mal laden (obwohl der Benutzer in dieser Anwendung keine solche Möglichkeit haben sollte).

Als eine der Optionen zum Erkennen von Fehlern müssen Sie herausfinden, wie die Ganzzahlvariable pageNumber aktualisiert wird, nachdem neue Beiträge auf die Seite geladen wurden. Da Sie mit meinem Code immer noch nicht vertraut sind, müssen Sie einige Zeit aufwenden, um zu verstehen, was darin vor sich geht.

Mach dir keine Sorgen. Wende etwas Magie an.

Aus dem ersten Teil des Artikels haben wir erfahren, dass die GET-HTTP-Anforderung im Abschnitt Networking der Pragma-Marke ausgeführt wird . Es enthält genau eine loadPosts- Funktion . Platzieren Sie einen Haltepunkt in der ersten Zeile dieser Funktion und ziehen Sie die Tabelle zum Aktualisieren nach unten. Der Compiler stoppt an diesem Haltepunkt.

Bild
Objective-C

Bild
Swift

Klicken Sie im unteren Fenster des Debuggers auf die Schaltfläche "Show Variables". Links öffnet sich ein neues Fenster, in dem Sie alle Variablen von PostsTableViewController sehen.

Bild

Zeigen Sie mit dem Cursor auf pageNumber, klicken Sie mit der rechten Maustaste und wählen Sie "Watch _pageNumber" / "Watch pageNumber" für Objective-C bzw. Swift.

Bild
Die C-of Objective

Bild
Swift

So haben Sie einen so genannten Beobachtungspunkt (Beobachtungspunkt) für Variable erstellt Seitennummer . Watchpoint ist eine Art von Haltepunkt, der den Debugger jedes Mal stoppt, wenn der Wert der Variablen geändert wird.

Bild
Objective-C

Bild
Swift

Setzen Sie das Programm fort. Der Debugger wird angehalten und Sie sehen ungefähr Folgendes:

Objective-C

Bild

  1. Zeichnet den alten und den neuen Wert der Variablen pageNumber auf .
  2. Verfolgen eines Codestapels , der den Wert der pageNumber- Variablen ändert .
  3. Der aktuelle Punkt, an dem die Variable pageNumber geändert wurde, ist die Setter-Methode dieser Variablen.

Wenn Sie sich bei der Stapelverfolgung auf Schritt 1 beziehen, werden Sie zum folgenden Codeausschnitt geführt:

Bild

Swift

Bild

  1. Der Debugger informiert Sie darüber, dass der von Ihnen festgelegte Beobachtungspunkt etwas enthüllt hat.
  2. Verfolgen eines Codestapels , der den Wert der pageNumber- Variablen ändert .
  3. Der aktuelle Punkt, an dem die Variable pageNumber geändert wurde, ist die Funktion updateForNetworkCallEnd .

Es ist logisch , zu schließen , dass jedes Mal nach einer erfolgreichen HTTP - GET - Anforderung, die variable Seitennummer um 1 , solange die Variable erhöhte Zustand (Typ enum) in dem „aktiven“ Zustand. Diese Variable kann zwei Zustände haben: entweder aktiv ("aktiv") oder inaktiv ("inaktiv"). Der Status "Aktiv" setzt voraus, dass der Benutzer Beiträge laden kann (dh das Limit von 7 Downloads wurde nicht erreicht). Der Status "inaktiv" setzt hingegen voraus, dass der Benutzer keine Beiträge mehr laden kann. Als Ergebnis müssen wir die Logik in einer Funktion hinzuzufügen updateForNetworkCallEnd , welche die Variablen überprüfen würde Seitennummer und haben variable ausgestellt Zustand entsprechend dem Zustand.

Wie Sie vielleicht erraten haben, ist es viel einfacher, die Hypothese zunächst zu testen, ohne den Compiler anzuhalten, bevor Sie Änderungen am Code vornehmen.

Ich nehme zur Kenntnis , dass in Abschnitt Pragma Marke Unterstützung ist bereits notwendig , um uns (Funktion setToInactiveState ), die die Variable setzt Zustand Zustand «inaktiv».
Fügen Sie einen Haltepunkt eine Zeile über der if- Bedingung hinzu . Fügen Sie dem Debugger außerdem den folgenden Anweisungsbefehl hinzu.

Ziel-c

expression if (self.pageNumber >= 7) {[self setToInactiveState]}

Bild

Schnell

expression if (self.pageNumber >= 7) {setToInactiveState()}


Bild

Löschen Sie danach den allerersten Haltepunkt, mit dem Sie den Beobachtungspunkt festgelegt haben. Deaktivieren Sie auch den Watchpoint.

Bild
Objective-C

Bild
Objective-C

Bild
Swift

Bild
Swift

Scrollen Sie nun durch die Tabellen, ziehen Sie zum Aktualisieren nach unten und beginnen Sie mit dem Scrollen.
Alles hat geklappt! Zum Feiern ist es jedoch noch zu früh. Wir müssen noch einen Fehler beheben!

Was weiter?

Der letzte, dritte Teil des Artikels, in dem wir eine andere Art von Haltepunkten kennenlernen - symbolische (symbolische Haltepunkte).

Jetzt auch beliebt: