103 votes

Xcode 4 et Core Data : Comment activer le débogage SQL

Je travaille sur une application iOS universelle et j'aimerais voir le SQL brut dans les journaux lorsque je débogue. Il y a quelques informations dans cet article de blog sur la façon d'activer la journalisation SQL brute pour le développement iOS Core Data. L'exemple donné est pour Xcode 3 et je ne vois pas très bien comment l'activer dans Xcode 4.

J'ai essayé "Product" -> "Edit Scheme" et ajouté " -com.apple.CoreData.SQLDebug 1 "en "Arguments Passed on Launch", mais je ne vois toujours pas de résultat dans les journaux. Je ne sais pas si je cherche au mauvais endroit ou si je passe les arguments de manière incorrecte.

1 votes

Merci pour cela. Mon principal problème est que la table sur laquelle j'effectue mes recherches compte un peu plus de 74 000 lignes et je voulais avoir une idée de la durée des requêtes, car elle est assez lente pour le moment. Je respecte le fait qu'il y ait beaucoup d'abstraction, mais je ne savais vraiment pas ce qui se passait sous le capot. Cela m'aide au moins un peu.

0 votes

Tant que vous comprenez les limites, il est possible de regarder le SQL brut, en particulier pour améliorer les performances. Là où les gens ont des problèmes, c'est en essayant de comprendre comment le graphe d'objets se comporte en regardant le SQL brut. Comme il n'y a pas de relation directe entre les deux, ils s'égarent.

0 votes

Cela répond-il à votre question ? Comment imprimer les valeurs de débogage de Core Data ?

152voto

Nicolas S Points 2495

Vous devriez regarder au même endroit où vous obtenez les NSLOGS

Et vous devriez aller dans Produit -> Modifier le schéma -> Ensuite, dans le panneau de gauche, sélectionnez Exécuter YOURAPP.app et allez dans l'onglet Arguments du panneau principal.

Vous pouvez y ajouter un Argument Passé au Lancement.

Vous devez ajouter -com.apple.CoreData.SQLDebug 4 (nombre entre 1 et 4, plus le nombre est élevé, plus il est verbeux)

Appuyez sur OK et vous êtes prêt.

La clé ici est de modifier le schéma que vous utiliserez pour les tests.

8 votes

Merci pour ça. Il s'avère qu'en ce qui concerne le simulateur, le format de mes arguments n'était pas le bon, comme je le vois dans l'une des réponses ici. stackoverflow.com/questions/822906/ Je dois passer un argument de -com.apple.CoreData.SQLDebug et un second argument de 1 afin de voir la sortie SQL.

2 votes

Comment imprimer les arguments passés à la base de données ? Cette approche fonctionne bien pour voir comment la requête est structurée, mais elle n'imprime que l'instruction sql, par exemple UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ? et il n'est pas très utile de voir réellement quelles sont les données envoyées.

0 votes

En fait, j'ai pensé qu'il serait préférable de l'ajouter comme une vraie question de SO ;) stackoverflow.com/questions/12306343/

20voto

OverToasty Points 426

XCode 4

C'est au même endroit que je gère mon NSZombieEnabled

Produit -> Modifier le schéma -> Exécuter YouApp.app Debug

Sous "Arguments passés au lancement", collez exactement :

-com.apple.CoreData.SQLDebug 1

Si vous avez des problèmes avec Core Data, cela vaut la peine d'y jeter un coup d'œil, mais il se peut aussi que vous ayez plus d'informations que nécessaire sur la mauvaise chose.

0 votes

Y a-t-il un moyen d'imprimer ce -com.apple.CoreData.MigrationDebug 1 sur un fichier de type chaîne, afin que l'utilisateur puisse télécharger le fichier journal ?

5voto

user730458 Points 41

J'avais un problème avec cela, puis j'ai réalisé qu'il s'agissait d'une omission stupide, ce qui, je suppose, est une erreur courante pour certains d'entre vous. Lorsque je suis entré dans l'argument dans Xcode (4.3.1) j'ai laissé le trait d'union de côté. Je ne l'aurais pas fait si je l'avais entré sur une ligne de commande, mais dans l'interface graphique je l'avais omis. Je n'ai pas trouvé de différence entre l'entrée de 2 args séparés ou d'un seul (comme certains messages l'avaient suggéré). Donc, utilisez :

-com.apple.CoreData.SQLDebug 1

et pas simplement :

com.apple.CoreData.SQLDebug 1

qui a fonctionné pour moi à la fois dans le simulateur et le dispositif réel

3voto

everlof Points 851

Notez que vous pouvez mettre différents niveaux de la valeur passée. Ce qui fournit de plus en plus de verbosité.

-com.apple.CoreData.SQLDebug 1
-com.apple.CoreData.SQLDebug 2
-com.apple.CoreData.SQLDebug 3
-com.apple.CoreData.SQLDebug 4 // This will actually show parameter binds ("?")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X