Xcode 4 e Core Data: come abilitare il debug SQL


102

Sto lavorando su un'app iOS universale e mi piacerebbe vedere l'SQL grezzo nei log durante il debug. In questo post del blog sono disponibili alcune informazioni su come abilitare la registrazione SQL non elaborata per lo sviluppo di dati di base di iOS. L'esempio fornito è per Xcode 3 e non mi è chiaro come abilitarlo in Xcode 4.

Ho provato "Prodotto" -> "Modifica schema" e aggiunto " -com.apple.CoreData.SQLDebug 1 " a "Argomenti passati all'avvio ", ma non vedo ancora alcun output nei log. Non sono sicuro se sto cercando nel posto sbagliato o se sto solo passando gli argomenti in modo errato.


1
Grazie per questo. Il mio problema principale è che la tabella su cui sto cercando ha poco più di 74.000 righe e volevo avere un'idea della durata delle query, dato che al momento è piuttosto lento. Rispetto il fatto che ci sia un sacco di astrazioni in corso, ma ero davvero all'oscuro di quello che stava succedendo sotto il cofano. Questo almeno mi aiuta solo un po '.
oalders

Finché comprendi i limiti, va bene guardare l'SQL grezzo, specialmente per il tweaking delle prestazioni. Dove le persone si mettono nei guai è cercare di capire come si sta comportando il grafo degli oggetti guardando l'SQL grezzo. Poiché non esiste una relazione diretta tra i due, li porta fuori strada.
TechZen

Risposte:


150

Dovresti guardare nello stesso posto in cui ottieni NSLOG

E dovresti andare su Prodotto -> Modifica schema -> Quindi dal pannello di sinistra seleziona Esegui YOURAPP.app e vai alla scheda Argomenti del pannello principale.

Qui puoi aggiungere un argomento trasmesso all'avvio.

Dovresti aggiungere -com.apple.CoreData.SQLDebug 4(un numero compreso tra 1 e 4, un numero più alto lo rende più dettagliato)

Premi OK e sei pronto.

La chiave qui è modificare lo schema che utilizzerai per i test.


8
Grazie per questo. Risulta, per quanto riguarda il simulatore, il formato dei miei argomenti era sbagliato come vedo in una delle risposte qui stackoverflow.com/questions/822906/… Ho bisogno di passare un argomento di -com.apple.CoreData.SQLDebug e un secondo argomento di 1 per vedere l'output SQL.
oalders

2
qualche idea su come stampare gli argomenti passati al database? questo approccio funziona bene per vedere come viene strutturata la query, ma stampa solo l'istruzione sql, come UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?e non è molto utile per vedere veramente quali sono i dati inviati
Felipe Sabino

In realtà, ho pensato che sarebbe stato meglio aggiungerlo come una vera domanda SO;) stackoverflow.com/questions/12306343/…
Felipe Sabino

c'è un modo per accedere solo se si inserisce nel database non per altri casi?
Bishal Ghimire

@BishalGhimire Non sono sicuro, forse potresti filtrare per evento da qualche parte. Filtrerei l'output direttamente utilizzando il filtro del testo.
Nicolas S

20

XCode 4

È nello stesso posto in cui gestisco il mio NSZombieEnabled

Prodotto -> Modifica schema -> Esegui il debug di YouApp.app

In "Argomenti trasmessi all'avvio", incolla esattamente:

-com.apple.CoreData.SQLDebug 1

Attenzione: questa roba è molto prolissa, se hai problemi con i dati di base, potrebbe valere la pena esaminarla, ma potrebbe anche contenere più informazioni del necessario per la cosa sbagliata.


Qualsiasi modo per stampare questo -com.apple.CoreData.MigrationDebug 1 su file stringa, in modo che l'utente possa caricare il file di registro
rhlnair

5

Stavo avendo un problema con questo e poi ho capito che era una sciocca omissione, che presumo sia un errore per alcuni di voi. Quando ho inserito l'argomento in Xcode (4.3.1), ho omesso il trattino iniziale. Non l'avrei fatto se lo avessi inserito su una riga di comando, ma nella GUI l'avevo omesso. Non ho trovato alcuna differenza tra l'inserimento di 2 argomenti separati o uno (come suggerito da alcuni post). Quindi usa:

-com.apple.CoreData.SQLDebug 1

e non semplicemente:

com.apple.CoreData.SQLDebug 1

che ha funzionato per me sia nel simulatore che nel dispositivo reale


3

Nota che puoi inserire diversi livelli del valore passato. Che forniscono sempre più 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 ("?")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.