Vous pouvez définir un point d'arrêt conditionnel dans Xcode en définissant le point d'arrêt normalement, puis cliquez dessus tout en maintenant la touche Contrôle enfoncée et sélectionnez Modifier le point d'arrêt (choisissez Exécuter -> Afficher -> Points d'arrêt).
Dans l'entrée de point d'arrêt, il y a une colonne Condition.
Maintenant, il y a plusieurs problèmes à garder à l'esprit pour la maladie. Premièrement, gdb ne comprend pas la syntaxe des points, donc au lieu de myObj.name, vous devez utiliser [myObj name] (sauf si name est un ivar).
Ensuite, comme pour la plupart des expressions dans gdb, vous devez lui indiquer le type de résultat renvoyé, à savoir "BOOL". Alors définissez une condition comme:
(BOOL)[[myObj name] isEqualToString:@"Bar"]
Souvent, il est en fait plus facile de faire cela dans le code en ajoutant temporairement du code comme:
if ( [myObj.name isEqualToString:@"Bar"] ) {
NSLog( @"here" );
}
puis définissant le point de rupture sur le NSLog. Alors votre condition peut être arbitrairement complexe sans avoir à vous soucier de ce que gdb peut et ne peut pas analyser.
Voici comment utiliser les points d'arrêt conditionnels XCode lldb.
Tout d'abord, double-cliquez sur le point de rupture (ou clic droit
edit breakpoint
), vous pouvez voir une fenêtre de dialogue.Voici ce que signifie cette option:
Voici un résumé. Pour l'exemple ci-dessus en image, cela signifie que lorsque la variable
buildingId
est égale à 13, coupez ici. Si j'ajoute le temps d'ignorer à 1, alors il ignorera la première fois quandbuildingId
est égal à 13 et se cassera à la deuxième fois que la condition est remplie.Pour les actions, lorsque vous appuyez sur Ajouter des actions, il y aura une liste de choix. Habituellement, ce que je fais est d'utiliser les
Debugger Command
po
variables pour imprimer que je dois vérifier et je pense qu'il existe de meilleures façons d'utiliser les actions que moi.Il semble que vous deviez recompiler et exécuter l'application si vous modifiez les conditions au moment de l'exécution
la source
Je ne sais pas si cela fonctionnera, mais vous pouvez essayer de définir un point d'arrêt sur cette ligne de code, ouvrir la console du débogueur (Cmd + Shift + R) et taper
Où N est remplacé par le numéro du point d'arrêt (un entier).
la source
Si vous mutez myObj.name à l'aide du setter, vous pouvez ajouter un point d'arrêt symbolique
-[MyObjClass setName:]
soit à partir de la console de débogage, soit à partir du menu Exécuter-> Gérer les points d'arrêt- > Ajouter un point d'arrêt symbolique dans Xcode. Si non (pourquoi pas? Vous ne devriez probablement pas modifier la variable d'instance directement sauf dans l'initialiseur ou le dealloc désigné), vous pouvez définir un point de vue dans gdb (utilisez la console de débogage dans Xcode une fois que le débogueur est en cours d'exécution). Cette page explique comment. Je ne pense pas que Xcode expose une interface utilisateur pour définir des points de surveillance sans utiliser la console de débogage.la source
Parfois, lorsque vous travaillez avec Frameworks (versions de débogage) et que vous devez placer un point d'arrêt dans certains fichiers / emplacements difficiles à naviguer ou qui ne sont pas exposés publiquement dans le cadre en cours de développement. Une option consiste à écrire une classe d'assistance pour déclencher des points d'arrêt conditionnels et faciliter les étapes d'entrée / sortie.
Déclaration d'en-tête dans le cadre en cours de développement.
Et dossier d'implémentation:
la source