Xcode 4 und Kerndaten: So aktivieren Sie das SQL-Debugging

102

Ich arbeite an einer universellen iOS-App und möchte beim Debuggen das unformatierte SQL in den Protokollen sehen. In diesem Blogbeitrag finden Sie einige Informationen zum Aktivieren der SQL-Rohprotokollierung für die Entwicklung von iOS-Kerndaten. Das angegebene Beispiel bezieht sich auf Xcode 3 und es ist mir einfach nicht klar, wie ich dies in Xcode 4 aktivieren kann.

Ich habe "Product" -> "Edit Scheme" ausprobiert und " -com.apple.CoreData.SQLDebug 1 " zu "Arguments Passed on Launch" hinzugefügt, sehe aber immer noch keine Ausgabe in den Protokollen. Ich bin mir nicht sicher, ob ich am falschen Ort suche oder nur die Argumente falsch übergebe.

oalders
quelle
1
Danke dafür. Mein Hauptproblem ist, dass die Tabelle, nach der ich suche, etwas mehr als 74.000 Zeilen enthält, und ich wollte eine Vorstellung davon bekommen, wie lange Abfragen ausgeführt werden, da sie derzeit recht langsam sind. Ich respektiere die Tatsache, dass eine Menge Abstraktion stattfindet, aber ich war wirklich im Dunkeln darüber, was unter der Haube vor sich ging. Das hilft mir zumindest ein bisschen.
oalders
Solange Sie die Einschränkungen verstehen, ist es in Ordnung, sich das unformatierte SQL anzusehen, insbesondere zur Leistungsoptimierung. Wenn Leute in Schwierigkeiten geraten, versuchen sie herauszufinden, wie sich das Objektdiagramm verhält, indem sie sich das unformatierte SQL ansehen. Da es keine direkte Beziehung zwischen den beiden gibt, führt es sie nur in die Irre.
TechZen

Antworten:

150

Sie sollten sich den gleichen Ort ansehen, an dem Sie NSLOGS erhalten

Gehen Sie zu Produkt -> Schema bearbeiten -> Wählen Sie dann im linken Bereich die Option YOURAPP.app ausführen und wechseln Sie zur Registerkarte Argumente des Hauptfensters.

Dort können Sie ein Argument hinzufügen, das beim Start übergeben wurde.

Sie sollten hinzufügen -com.apple.CoreData.SQLDebug 4(Zahl zwischen 1 und 4, höhere Zahl macht es ausführlicher)

Drücken Sie OK und Sie sind fertig.

Der Schlüssel hier ist, das Schema zu bearbeiten, das Sie zum Testen verwenden werden.

Nicolas S.
quelle
8
Danke dafür. Was den Simulator betrifft, stellte sich heraus , dass das Format meiner Argumente falsch war, wie ich in einer der Antworten hier sehe. Stackoverflow.com/questions/822906/… Ich muss ein Argument von -com.apple.CoreData.SQLDebug übergeben und ein zweites Argument von 1 , um die SQL-Ausgabe zu sehen.
oalders
2
Irgendwelche Gedanken zum Drucken der Argumente, die an die Datenbank übergeben werden? Dieser Ansatz funktioniert gut, um zu sehen, wie die Abfrage strukturiert ist, aber es wird nur die SQL-Anweisung gedruckt, UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?und es ist nicht sehr nützlich, wirklich zu sehen, welche Daten gesendet werden
Felipe Sabino
Eigentlich dachte ich, es wäre besser, es als echte SO-Frage hinzuzufügen;) stackoverflow.com/questions/12306343/…
Felipe Sabino
Gibt es eine Möglichkeit, wie ich mich nur anmelden kann, wenn es nicht für einen anderen Fall in die Datenbank eingefügt wird?
Bishal Ghimire
@BishalGhimire Ich bin mir nicht sicher, vielleicht könnten Sie irgendwo nach Ereignis filtern. Ich würde die Ausgabe direkt mithilfe der Textfilterung filtern.
Nicolas S
20

XCode 4

Es ist an der gleichen Stelle, an der ich mein NSZombieEnabled verwalte

Produkt -> Schema bearbeiten -> YouApp.app-Debug ausführen

Fügen Sie unter "Beim Start übergebene Argumente" genau Folgendes ein:

-com.apple.CoreData.SQLDebug 1

Warnung - dieses Zeug ist sehr ausführlich. Wenn Sie Probleme mit den Kerndaten haben, ist dies möglicherweise einen Blick wert, aber es kann auch mehr Informationen enthalten, als Sie über das Falsche benötigen.

OverToasty
quelle
Jede Möglichkeit, diese -com.apple.CoreData.MigrationDebug 1 in einer Zeichenfolgendatei zu drucken, damit der Benutzer die Protokolldatei hochladen kann
rhlnair
5

Ich hatte ein Problem damit und stellte dann fest, dass es eine dumme Auslassung war, von der ich annehme, dass sie für einige von Ihnen ein Fehler ist. Als ich das Argument eingegeben habe Xcode (4.3.1), habe ich den führenden Bindestrich weggelassen. Ich hätte es nicht getan, wenn ich es über eine Befehlszeile eingegeben hätte, aber in der GUI hatte ich es weggelassen. Ich habe keinen Unterschied zwischen der Eingabe bei 2 oder einem Argument festgestellt (wie einige Beiträge vorgeschlagen hatten). Verwenden Sie also:

-com.apple.CoreData.SQLDebug 1

und nicht einfach:

com.apple.CoreData.SQLDebug 1

Das hat bei mir sowohl im Simulator als auch im realen Gerät funktioniert

user730458
quelle
3

Beachten Sie, dass Sie verschiedene Ebenen des übergebenen Werts eingeben können. Welche bieten immer mehr Ausführlichkeit.

-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 ("?")
Netigger
quelle