Encore un problème de mémoire...
chaps31
Membre
Ce coup-ci c'est sur une variable interne à une méthode... il s'agit d'un NSMutableString auquel j'envoie un length, et erreur... problème de "bound"... bon donc je mets qques breakpoint et dans le debbuger:
La variable est là elle a une valeur, j'obtiens sa classe, sa valeur mais pour le length erreur d'accès mémoire... Là vraiment je ne comprends pas... Au secours.... :why?: :crackboom:-
(gdb) po [upd class]<br />NSCFString<br />Current language: auto; currently objective-c<br />(gdb) po [upd length]<br />Cannot access memory at address 0xa2<br />(gdb) po upd<br />INSERT INTO (blabla... c'est la bonne valeur)
La variable est là elle a une valeur, j'obtiens sa classe, sa valeur mais pour le length erreur d'accès mémoire... Là vraiment je ne comprends pas... Au secours.... :why?: :crackboom:-
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
"po" est un raccourci pour la commande "print-object", qui a pour but d'afficher à l'écran la valeur d'un NSObject. C'est à dire qu'en gros demander à gdb "po tonObjet" fait comme un NSLog(@%@,tonObjet) dans ton code : ça appelle la méthode description" sur ton objet, qui retourne une représentation sous forme de chaà®ne (NSString) de ton objet pour être affichée.
Or "length" ne te retourne pas un objet, c'est un entier. Du coup demander à gdb "po [upd length]" fait qu'il va récupérer la longueur de upd (162 caractères)... et interpréter ça comme un NSObject (se trouvant à l'adresse mémoire 162=0xa2) à afficher... donc essayer de lui envoyer le message "description"... et boum, "Cannot access memory at address 0xa2".
Il faut tout simplement que tu "castes" le type de retour si ce n'est pas un objet :
Incompréhensible...
print expr
Display the value of an expression.
soit ici : (gdb) print [updlength]
Essaie print -[upd length]
Et derrière il y a un pb de "bound" sur un delete qui se sert de length... donc réellement un soucis je ne vois vraiment pas pourquoi...
Bon j'ai contourné le problème en codant différemment mais n'empêche que j'aimerais bien comprendre, face à un problème le contourner ne fait pas progresser et il y a toujours le risque d'avoir un retour du problème plus loin...
print (int)[opd length]
Faut que je trouve de la doc sur ce que je peux mettre dans le debugger lors de breakpoint...