Bonjour, aujourd'hui, je vous suggÚre de vous familiariser avec la traduction d'un article sur le débogage des applications iOS à l'aide de LLDB.
L'une des parties les plus intrigantes de la présentation de la WWDC 2018,
Xcode et le dĂ©bogage avancĂ© en LLDB, a Ă©tĂ© introduite par les ingĂ©nieurs d'Apple. Ils ont donnĂ© quelques conseils utiles sur la façon d'utiliser les points d'arrĂȘt dans Xcode et le dĂ©bogueur de bas niveau (LLDB) pour optimiser le processus de dĂ©bogage des bogues, oĂč que le dĂ©veloppeur les ait dĂ©tectĂ©s.
L'article se compose de trois parties, nous allons passer en revue les principaux points qui ont Ă©tĂ© Ă©noncĂ©s Ă la WWDC. J'ai créé un projet de dĂ©monstration spĂ©cifiquement pour mieux comprendre comment utiliser diffĂ©rents types de points d'arrĂȘt (points d'arrĂȘt) en conjonction avec LLDB pour capturer et dĂ©boguer des bogues dans votre application.
Projet de démonstrationJ'ai créé un projet de tùche modÚle que chaque développeur iOS a rencontré d'une maniÚre ou d'une autre. Il est trÚs important de comprendre comment cela fonctionne avant de plonger dans la lecture de l'article. Voici les principales fonctions du projet de démonstration:
- Lorsqu'il est ouvert, nous voyons un contrĂŽleur de vue de table qui charge une liste de publications.
- Lors du défilement vers le bas, le contrÎleur de vue de table charge de nouveaux messages.
- Au total, vous pouvez charger des publications 7 fois .
- Vous pouvez mettre Ă jour la liste des publications en tirant vers le bas Ă l'aide du contrĂŽleur de rafraĂźchissement (tirez vers le bas pour rafraĂźchir).
- Dans la barre de navigation en haut, il y a 2 étiquettes (étiquettes) qui montrent combien de messages ont été téléchargés (étiquette de droite) et combien de fois l'utilisateur a déjà téléchargé des messages (étiquette de gauche).
Vous pouvez télécharger le projet
de dĂ©monstration Ă
partir d'ici si vous préférez Objective-C.
Si vous prĂ©fĂ©rez Swift, alors Ă
partir d'ici .
Lancez Xcode et c'est parti!
Bugs Ă corriger!Vous vous ĂȘtes donc familiarisĂ© avec le projet et avez probablement remarquĂ© les erreurs suivantes:
- Lorsque vous tirez la table vers le bas, le rafraĂźchisseur ne met pas Ă jour les messages.
- L'utilisateur ne reçoit aucune notification (à l'aide du contrÎleur d'alerte) indiquant que la demande HTTP n'a pas été exécutée en raison de problÚmes de connexion.
- Vous pouvez charger des publications plus de 7 fois.
- L'indicateur de gauche (étiquette) dans la barre de navigation, qui est responsable du comptage du nombre de téléchargements, ne fonctionne pas.
Une rĂšgle importante: 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.
Le pouvoir des équipes pédagogiquesPassons au premier bug.
1. Lorsque vous tirez le tableau vers le bas, les messages ne sont pas mis Ă jour.Comment reproduire l'erreur:
- Lancez l'application, les 10 premiers messages sont déjà chargés.
- Faites défiler vers le bas pour charger plus de messages.
- Faites défiler jusqu'au début du tableau et faites-le glisser pour actualiser.
- Les nouveaux messages ne se chargent pas et les anciens ne disparaissent pas, et le compteur de messages n'est pas réinitialisé.
L'approche standard pour corriger de telles erreurs consiste Ă examiner ce qui se passe Ă l'intĂ©rieur du sĂ©lecteur de mĂ©thode responsable de l'UIRefreshControl de notre table. AccĂ©dez Ă
PostsTableViewController dans la section de
prise en charge du contrÎle de rafraßchissement de la marque pragma . à partir de la fonction setupRefreshControl, nous pouvons conclure que le sélecteur responsable de la mise à jour des publications est la fonction
reloadNewPosts . Ajoutons un point d'arrĂȘt Ă la premiĂšre ligne de cette fonction et dĂ©couvrons ce qui se passe exactement ici. Faites maintenant dĂ©filer jusqu'au dĂ©but du tableau et faites glisser l'Ă©cran pour actualiser.
Objectif-c
RapideLe dĂ©bogueur s'est arrĂȘtĂ© au point d'arrĂȘt que vous avez dĂ©fini. Pour une Ă©tude plus approfondie, cliquez sur le bouton «sauter le bloc» du dĂ©bogueur.
Objectif-c
RapideMaintenant, nous comprenons ce qui ne va pas!
La condition if n'est pas remplie (c'est-à -dire que la variable booléenne isPullDownToRefreshEnabled est définie sur NO) et, par conséquent, le code de mise à jour des publications est ignoré.
L'approche standard consiste Ă arrĂȘter le compilateur, puis vous devez dĂ©finir isPullDownToRefreshEnabled sur YES / true et cela rĂ©soudrait le problĂšme. Mais il serait beaucoup plus pratique de tester d'abord notre hypothĂšse avant d'apporter des modifications au code et sans avoir Ă arrĂȘter le compilateur. C'est lĂ que les commandes d'instruction du dĂ©bogueur s'avĂšrent trĂšs utiles.
Double-cliquez sur le point d'arrĂȘt installĂ© ou faites un clic droit sur «Modifier le point d'arrĂȘt» et cliquez sur le bouton «Ajouter une action». SĂ©lectionnez Ă©galement le type d'action «Commande du dĂ©bogueur».

Maintenant, nous devons définir la propriété isPullDownToRefreshEnabled sur YES / true. Ajoutez la commande suivante au débogueur.
Objectif-c
expression self.isPullDownToRefreshEnabled = YES

Rapide
expression self.isPullDownToRefreshEnabled = true

Ensuite, vérifiez que la case «Continuer automatiquement aprÚs l'évaluation des actions» est cochée. Il est chargé de s'assurer que le débogueur
ne s'arrĂȘte
pas au point d'arrĂȘt Ă chaque fois et continue automatiquement de travailler avec la commande nouvellement ajoutĂ©e. Faites maintenant dĂ©filer jusqu'au dĂ©but du tableau et faites glisser vers le bas pour actualiser.
Voila, les nouveaux messages ont chargé et remplacé les anciens et, en conséquence, le compteur de messages a été mis à jour.
Nous avons résolu le premier problÚme, procurez-vous votre arme anti-bug, nous passons au second.
2. L'utilisateur ne reçoit aucune notification (à l'aide du contrÎleur d'alerte) indiquant que la demande HTTP n'a pas été exécutée en raison de problÚmes de connexion.Comment reproduire l'erreur:
- Déconnectez la connexion Internet de votre iPhone / simulateur.
- Faites défiler jusqu'au début du tableau et faites glisser vers le bas pour actualiser.
- Les nouveaux messages ne seront pas téléchargés en raison d'une erreur de connexion Internet.
- L'utilisateur ne reçoit aucune notification d'erreur.
AccĂ©dez Ă
PostsTableViewController dans la section
Networking de la marque pragma . Il a exactement une fonction
loadPosts . Il utilise une instance de gestionnaire de rĂ©seau commune pour exĂ©cuter une requĂȘte HTTP GET qui renvoie un tableau de publications via un gestionnaire de fin «succĂšs» ou
NSError via un gestionnaire de fin «échec».
Nous devons ajouter le code à la fermeture «infructueuse» afin d'afficher un contrÎleur d'alerte. Si vous accédez à la section
Support de la marque pragma, vous verrez qu'il existe déjà une fonction
presentNetworkFailureAlertController chargée d'afficher le contrÎleur d'alerte souhaité. Tout ce que nous devons faire est d'appeler cette fonction dans une fermeture "échouée" dans
loadPosts .
La maniĂšre traditionnelle consiste Ă arrĂȘter le simulateur et Ă ajouter le code souhaitĂ©. Allons dans l'autre sens!
Ajoutez un point d'arrĂȘt Ă l'intĂ©rieur de la fermeture «infructueuse» aprĂšs la ligne
Objectif-c
[self updateUIForNetworkCallEnd];
Rapide
self.updateUIForNetworkCallEnd()
Double-cliquez sur le point d'arrĂȘt installĂ© ou faites un clic droit sur «Modifier le point d'arrĂȘt» et cliquez sur le bouton «Ajouter une action». SĂ©lectionnez Ă©galement le type d'action «Commande du dĂ©bogueur».
Ajoutez la commande suivante au débogueur.
Objectif-c
expression [self presentNetworkFailureAlertController]

Rapide
expression self.presentNetworkFailureAlertController()

Vérifiez que la case «Continuer automatiquement aprÚs l'évaluation des actions» est cochée.
Avec Internet désactivé, faites défiler jusqu'au début du tableau et faites glisser vers le bas pour mettre à jour, ou vous pouvez faire défiler jusqu'à la fin du tableau et essayer de charger de nouveaux messages. Voici ce que vous verrez:

Ce que nous venons de faire s'appelle
« injecter
» le code Ă l'aide d'une commande ajoutĂ©e au dĂ©bogueur Ă un point d'arrĂȘt spĂ©cifique.
Un petit rĂ©sumĂ©ĂnumĂ©rons encore une fois ce que nous pouvons faire avec les commandes de dĂ©bogage ajoutĂ©es au point d'arrĂȘt:
- Fonctionne avec une valeur de propriété existante.
- Ajoutez une nouvelle ligne de code.
Les deux tĂąches ont Ă©tĂ© effectuĂ©es pendant l'exĂ©cution du programme. Nous n'avons essentiellement pas besoin d'arrĂȘter le compilateur pour corriger les erreurs et redĂ©marrer l'application.
Et ensuite?De plus, j'attire votre attention sur la
deuxiĂšme partie de l'article , oĂč nous corrigerons davantage d'erreurs et dĂ©couvrirons un autre type de point d'arrĂȘt (point d'arrĂȘt) - le point d'observation (point d'observation).