Dans certains codes iOS, j’ai un struct
ivar C sur un object. Un des membres de cette structure est de type double
. Si, dans une méthode, j’affecte à ce membre de struct
, le débogueur signale des valeurs parasites pour la valeur de ce membre de struct
lorsque struct
la struct
elle struct
même (comme le fait la liste des variables), mais lorsque struct
directement le membre de struct
, ( p structWithDouble.doubleMember
), je reçois la bonne valeur. De plus, si j’assigne la valeur de ce membre à une double
variable automatique locale, je vois la valeur correcte dans la liste et lors de l’impression.
J’imagine que c’est un problème avec LLDB, mais c’est déroutant et frustrant. est-ce un problème connu? Si oui, existe-t-il une solution de contournement?
typedef struct { double doubleMember; } structWithDouble; @interface MyClass : NSObject { structWithDouble structAsIvar; } @end @implementation - (void)someMethod { structAsIvar.doubleMember = 200.0; double localDouble = structAsIvar.doubleMember; }
Dans someMethod:
la liste de variables du débogueur affiche les valeurs suivantes:
structAsIvar.doubleMember (double) 1.65865e-307 localDouble (double) 200
Dans LLDB, j’obtiens le résultat suivant lors de l’ someMethod:
de someMethod:
::
(lldb) p structAsIvar.doubleMember (double) $4 = 200 (lldb) p structAsIvar (structAsIvar) $5 = { (double) doublemember = 1.17244e-312 } (lldb) p localDouble (double) 200 (lldb) p self->structAsIvar.doubleMember (double) 200
J’ai constaté qu’aucun de ce problème ne se produit lors de l’utilisation de GDB. Apparemment, LLDB n’est tout simplement pas encore prêt … Je voudrais quand même être intéressé par une solution de contournement pour LLDB.
Il semble que cela soit corrigé dans le lldb de Xcode 4.5 (lldb-167.2):
(lldb) p structAsIvar.doubleMember (double) $5 = 200 (lldb) p structAsIvar (structWithDouble) $6 = { (double) doubleMember = 200 } (lldb) p localDouble (double) $7 = 200 (lldb) p self->structAsIvar.doubleMember (double) $8 = 200 (lldb)
Je ne sais pas exactement quelle version a eu le correctif; Il est probable que Xcode 4.4 fonctionne également correctement, mais je n’ai pas l’essai sous la main pour le tester pour le moment.