Comportement étrange dans LLDB lors de l’impression d’un membre de structure de type double

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?

Exemples

 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 

Mettre à jour

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.