Utilisation du debugger sous PB en Cocoa

  • Créateur du sujet Créateur du sujet Membre supprimé 2
  • Date de début Date de début
M

Membre supprimé 2

Invité
Ma question va paraître peut-être un peu idiote mais je débute avec Learning Cocoa (j'en suis au chapitre NSTableView, DataSource, etc.)...

J'ai un projet en Cocoa/Objectiv-C... et je voudrais pouvoir connaître la valeur des variables à l'exécution.

Or quand je suis en debuggage (arrêté sur un point d'arrêt), dans l'onglet "debug" à chaque variable est associée un nombre du genre 608x5900. Je ne sais pas à quoi correspond ce nombre... et surtout je voudrais pouvoir connaître la valeur "vrai" de la variable : par exemple si j'ai un pointeur sur un objet NSString dans une variable, comment avoir connaissance de la chaîne de caractères (disons "patati") stocké dedans ?
Autre exemple, j'ai un pointeur sur un tableau NSArray, et je voudrais connaître les valeurs associées à chaque index (disons un objet NSWindow, un objet MyClass, etc.) ?
Dernier exemple, comment prendre connaissance dans le debugger, de la valeur de chacune des variables membres d'un objet (disons une variable "parent" qui pointe sur un objet, une variable "numero" qui a pour valeur un int, une variable "nom" qui pointe sur une NSString) ?...
 
Tout ce que j'ai pu trouver dans la doc de gdb, c'est qu'on pouvait utiliser la commande print nomDeLaVariable pour connaître la classe de l'instance reférencée par la variable en question... mais bon, ça ne m'avance pas beaucoup pour ne pas dire pas du tout.
 
Ça y est, j'ai trouvé !

Avant de commencer, j'aimerais quand même dire que j'ai du mal à croire qu'il existe aujourd'hui encore des debuggers aussi préhistoriques quand il s'agit de lire le contenu d'une variable (j'entends le support minimaliste des objets principalement), mais bon...

Donc après avoir fouillé pour la xième fois toute la doc des Developer Tools, surtout la doc sur gdb, dans laquelle il n'y a rien... j'ai fini par trouver dans la vieille doc OpenStep sur l'environnement Cocoa (et ses outils : PB et IB principalement) ce que je cherchais. Faut ouvrir le /Documentation/Cocoa/DevEnGuide/Book/Tools&TechniquesBook.pdf
et après se rendre à la page 213 du PDF (le chapitre traite du debuggage)...
Remarque : cette doc Tools&Techniques semble remarquable et vraiment d'une grande richesse, il serait temps qu'Apple se bouge pour la mettre à jour.

Finalement on s'aperçoit que l'intégration de gdb avec le debugger de l'actuel Project Builder est nettement moins poussé que dans le Project Builder OpenStep. On est donc obligé d'utiliser la ligne commande gdb...
Donc si on veut connaître le contenu de :
* une variable (de type primitif) : on utilise la commande print uneVariable
* un pointeur (sur une variable de type primitif) : on utilise print *uneVariable, car la commande print seul revoit dans ce cas l'adresse de la variable
* un objet Objectiv-c : print-object unObjet (nb : le pointeur est automatiquement résolu)
Comment ça marche...
Par defaut chaque objet implemente la méthode "description" qui renvoie l'adresse de l'objet (et cette méthode est celle appelée par print-object), or certaine classe comme NSString, NSArray, NSDate, NSDecimal, etc. surcharge cette méthode (de manière à renvoyer leur contenu).

Dernière chose, imaginons que j'ai un objet "objectPatati" qui définit la méthode "methodPatati" renvoyant un NSArray, on peut appeler la méthode à la suite de la commande print, ex:
print-object [objectPatati methodPatati]
et print-object renverra une description de l'objet NSArray, et si à ce moment là, je veux connaître la description d'un objet reférencé dans le tableau à l'index 3 (et non son adresse), il suffit d'écrire ça :
print-object [[objectPatati methodPatati] objectAtIndex:3]

et voili, c'est vraiment pas convivial et efficace, faut reconnaître, comparer à ce qui se fait en terme de debuggueur "visuel" aujourd'hui, mais ça permet de debugguer un minimum.