Bonjour, aujourd'hui, je porte à votre attention la deuxième partie de l'article sur le débogage des applications en LLDB.
Dans la première partie, nous avons compris comment utiliser les points d'arrêt dans Xcode pour modifier les propriétés existantes des variables et ajouter une ligne de code via les commandes d'instructions.
J'ai créé un projet de démonstration intentionnellement avec quelques erreurs afin de comprendre comment utiliser différents types de points d'arrêt dans LLDB pour déboguer l'application.
Si vous n'avez pas étudié la première partie de l'article, il est préférable de commencer par celle-ci. Permettez-moi de vous rappeler une règle importante de ce didacticiel: jusqu'à la fin de cet article, vous n'arrêtez pas le compilateur et ne redémarrez pas l'application après le tout premier lancement. Vous corrigez les erreurs lors de l'exécution du programme.
Points d'observationAinsi, l'erreur suivante dans l'application:
3. Vous pouvez charger des publications plus de 7 fois.Comment reproduire l'erreur:
- Activez Internet sur votre iPhone / simulateur
- Faites défiler jusqu'à la fin du tableau pour charger plus de messages.
- Vous pouvez charger des publications plus de 7 fois (bien que dans cette application, l'utilisateur ne devrait pas avoir une telle opportunité).
Comme l'une des options pour détecter les erreurs, vous devez savoir comment la variable entière
pageNumber est mise à jour après le chargement de nouveaux messages sur la page. Comme vous ne connaissez toujours pas mon code, vous devez passer un peu de temps à comprendre ce qui s'y passe.
Ne t'inquiète pas. Appliquez de la magie.
De la première partie de l'article, nous avons appris que la requête HTTP GET est exécutée dans la section
Networking de la marque pragma . Il contient exactement une fonction
loadPosts . Placez un point d'arrêt sur la première ligne de cette fonction et faites glisser le tableau vers le bas pour mettre à jour. Le compilateur s'arrêtera à ce point d'arrêt.
Objectif-c
RapideDans la fenêtre inférieure du débogueur, cliquez sur le bouton "Afficher les variables". Une nouvelle fenêtre apparaîtra sur la gauche, dans laquelle vous verrez toutes les variables PostsTableViewController.

Pointez le curseur sur pageNumber, faites un clic droit et sélectionnez «Watch _pageNumber» / «Watch pageNumber» pour Objective-C et Swift, respectivement.
Objectif-c
RapideAinsi, vous avez créé le soi-disant point d'observation pour la variable pageNumber. Watchpoint est un type de point d'arrêt qui arrête le débogueur à chaque fois que la valeur de la variable définie est modifiée.
Objectif-c
RapideContinuez le programme. Le débogueur s'arrête et vous voyez quelque chose comme ceci:
Objectif-c
- Enregistre les anciennes et les nouvelles valeurs de la variable pageNumber .
- Suivi d'une pile de code qui modifie la valeur de la variable pageNumber .
- Le point actuel qui a provoqué la modification de la variable pageNumber est la méthode de définition de cette variable.
Si vous vous référez à l'étape 1 du suivi de pile, cela vous mènera à l'extrait de code suivant:
Rapide
- Le débogueur vous informe que le point d'observation que vous avez défini a révélé quelque chose.
- Suivi d'une pile de code qui modifie la valeur de la variable pageNumber .
- Le point actuel qui a provoqué la modification de la variable pageNumber est la fonction updateForNetworkCallEnd .
Il est logique de conclure que chaque fois après une requête HTTP GET réussie, la variable
pageNumber est incrémentée de 1 jusqu'à ce que la variable d'
état (du type enum) soit à l'état "actif". Cette variable peut avoir 2 états: actif («actif») ou inactif («inactif»). L'état «actif» signifie que l'utilisateur peut charger des publications (c'est-à-dire que la limite de 7 téléchargements n'a pas été atteinte). L'état «inactif», au contraire, suppose que l'utilisateur ne pourra plus charger de messages. Par conséquent, nous devons ajouter une logique à la fonction
updateForNetworkCallEnd , qui vérifierait la variable
pageNumber et définirait la variable d'
état à l'état approprié.
Comme vous l'avez peut-être deviné, il est beaucoup plus facile de tester d'abord l'hypothèse sans arrêter le compilateur avant d'apporter des modifications au code.
Je note que dans la section
Support de la marque pragma , nous avons déjà la fonction dont nous avons besoin (
setToInactiveState ), qui définit la variable d'
état sur «inactive».
Ajoutez un point d'arrêt une ligne au-dessus de la condition
if . Ajoutez également la commande d'instruction suivante au débogueur.
Objectif-cexpression if (self.pageNumber >= 7) {[self setToInactiveState]}
Rapide expression if (self.pageNumber >= 7) {setToInactiveState()}

Après cela, supprimez le tout premier point d'arrêt que vous avez utilisé pour définir le point d'observation. Désactivez également le point de surveillance lui-même.
Objectif-c
Objectif-c
Rapide
RapideFaites maintenant défiler les tableaux, faites glisser vers le bas pour actualiser et commencer à retourner.
Tout a fonctionné! Mais il est trop tôt pour célébrer, nous avons encore un bug à corriger!
Et ensuite?La troisième partie finale de l'article, dans laquelle nous découvrons un autre type de points d'arrêt - symboliques (points d'arrêt symboliques).