Aide pour le debugger
colas_
Membre
Bonsoir !
Avis aux pros du débogage !
Je me demande si la chose suivante est possible avec le debugger.
Je lance mon programme, sans aucun point d'arrêt.
À un moment j'appuie sur pause.
Là , j'aimerais pouvoir voir les objets en mémoire, cliquer sur l'un pour accéder à sa classe et voir la valeur de ses properties.
Merci !
Colas
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
:-)
mais encore ?
Par exemple, une fois que j'ai cliqué sur pause, j'arrive sur cet écran. Mais je ne sais comment voir les objets qui sont en mémoire...
Sur quel bouton dois-je cliquer ?!
Merci !!!
Est-ce que ce que tu appelles frame correspond à la liste de méthodes appelées sur la gauche ?
Dans ce cas, si je stoppe le programme en appuyant sur pause et non grâce à un point d'arrêt, il y a des chances que le programme soit juste en mode "j'attends un event"... et donc, il n'y aura pas de frames à moi, non ?
Mais en même temps c'est logique au moment où tu fais pause tu es dans un contexte où il manipule rien de tes méthodes et objets or une variable n'a en général de sens que dans un contexte (une variable déclarée dans le corps d'une fonction n'existera que quand la fonction est exécutée et pas à l'extérieur)
Après si tu veux accéder à des objets qui existent même si tu n'as pas fait pause dans une frame qui les manipule, par exemple une property de ton rootViewController ou quoi, bah il va falloir aller le chercher. Genre y accéder en tapant dans la console "expr UIViewController* $rvc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]" et tu peux ensuite faire des trucs comme "po $rvc.proprieteAInspecter"
OK, c'est ce que je faisais, mais c'est un peu galère car il me semblait qu'il n'y avait pas d'autocomplétion. D'ailleurs l'autocomplétion est un peu aléatoire, des fois elle marche des fois non.
Au passage, j'apprends la syntaxe expr UIViewController* $rvc = [[[[UIApplication sharedApplication] delegate] window] rootViewController] qui va m'être très utile... Merci !!! Génial !
À part et po et expr, y a-t-il d'autres formules magiques à connaà®tre ?
Au passage, une autre question. Dans le debugger, il est impossible d'accéder au constantes des enums, genre UITableViewScrollDirectionVertical, non ? Y a-t-il un moyen de s'en sortir ?
C'est vrai que c'est pas la panacée dans ce cas, ces petits caprices de LLDB, mais bon, faut faire avec.
Sinon, non, à part "po" (qui est en fait un raccourci pour la commande "print-object"), "p" (raccourci pour "print", pour les types non-objet comme les int ou CGRect ou autre) et "expr", ce sont les plus utiles. Y'en a d'autres mais qui sont bcp moins fréquemment utilisés (déjà "expr" est méconnu).
Quand tu utilises "expr" ça ne fait qu'exécuter une instruction. Si tu veux déclarer une variable dans le cadre de LLDB, comme là avec la variable $rvc, il faut que cette variable commence par un "$" pour qu'elle puisse être déclarée localement dans le cadre du débuggeur.
Et oui, faut faire avec !
Je retiens :
po
p
expr
Autre bug (?) du debugger, quand on lui demande la frame d'un UIView, assez souvent il est très mécontent.
Mais paradoxalement, si je lui demande
il me répond pas 0 ou 1, mais il me réponde UICollectionViewScrollDirectionHorizontal !!!
D'ailleurs, j'ai l'impression que po a fait du progrès. Je n'utilise presque plus p... po passe sur les structures, les entiers, etc.
Pourquoi n'utilises tu pas plutôt NSLog? Les vérifs en console sont plus efficaces à mon avis que ce que tu veux faire (je n'utilise jamais les breakpoints pour ma part il faut dire...)
Tu peux ainsi vérifier les instanciations, les valeurs crées, etc.
Bien vu! (si j'ose dire...)