Xcode 4 e dados principais: como habilitar a depuração SQL

102

Estou trabalhando em um aplicativo iOS universal e gostaria de ver o SQL bruto nos logs quando estou depurando. Há algumas informações nesta postagem do blog sobre como habilitar o log de SQL bruto para o desenvolvimento de dados principais do iOS. O exemplo fornecido é para o Xcode 3 e não está claro para mim como habilitar isso no Xcode 4.

Eu tentei "Product" -> "Edit Scheme" e adicionei " -com.apple.CoreData.SQLDebug 1 " a "Arguments Passed on Launch", mas ainda não estou vendo nenhuma saída nos logs. Não tenho certeza se estou procurando no lugar errado ou apenas passando os argumentos incorretamente.

Oalders
fonte
1
Obrigado por isso. Meu principal problema é que a tabela que estou pesquisando tem pouco mais de 74.000 linhas e eu queria ter uma ideia de quanto tempo as consultas estão sendo executadas, já que está muito lento agora. Eu respeito o fato de que há muita abstração acontecendo, mas eu estava realmente no escuro sobre o que estava acontecendo sob o capô. Isso pelo menos me ajuda um pouco.
oalders
Contanto que você entenda as limitações, é bom examinar o SQL bruto, especialmente para ajustes de desempenho. Onde as pessoas têm problemas é tentar descobrir como o gráfico de objetos está se comportando olhando para o SQL bruto. Uma vez que não há relação direta entre os dois, isso apenas os desencaminha.
TechZen 01 de

Respostas:

150

Você deveria estar olhando para o mesmo lugar onde obteve NSLOGS

E você deve ir para Produto -> Editar esquema -> Em seguida, no painel esquerdo, selecione Executar YOURAPP.app e vá para a guia Argumentos do painel principal.

Lá você pode adicionar um argumento transmitido no lançamento.

Você deve adicionar -com.apple.CoreData.SQLDebug 4(número entre 1 e 4, número maior torna mais detalhado)

Pressione OK e está tudo pronto.

A chave aqui é editar o esquema que você usará para o teste.

Nicolas S
fonte
8
Obrigado por isso. Acontece que, no que diz respeito ao simulador, o formato dos meus argumentos estava errado, como vejo em uma das respostas aqui stackoverflow.com/questions/822906/… Eu preciso passar um argumento de -com.apple.CoreData.SQLDebug e um segundo argumento de 1 para ver a saída SQL.
oalders de
2
alguma ideia sobre como imprimir os argumentos que são passados ​​para o banco de dados? essa abordagem funciona bem para ver como a consulta está sendo estruturada, mas imprime apenas a instrução sql, gosto UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?e não é muito útil para ver realmente quais são os dados sendo enviados
Felipe Sabino
Na verdade, achei que seria melhor adicioná-lo como uma pergunta real do SO;) stackoverflow.com/questions/12306343/…
Felipe Sabino
existe alguma maneira de eu poder logar somente se ele inserir no banco de dados e não para outro caso?
Bishal Ghimire
@BishalGhimire Não tenho certeza, talvez você possa filtrar por evento em algum lugar. Gostaria de filtrar a saída diretamente usando a filtragem de texto.
Nicolas S
20

XCode 4

Está no mesmo lugar que gerencio meu NSZombieEnabled

Produto -> Editar Esquema -> Executar YouApp.app Debug

Em "Argumentos passados ​​no lançamento", cole exatamente:

-com.apple.CoreData.SQLDebug 1

Aviso - essas coisas são muito prolixas, se você estiver tendo problemas com Core Data, pode valer a pena dar uma olhada, mas também pode ser mais informações do que você precisa sobre a coisa errada.

OverToasty
fonte
Qualquer forma de imprimir este -com.apple.CoreData.MigrationDebug 1 no arquivo de string, para que o usuário possa carregar o arquivo de log
rhlnair
5

Eu estava tendo um problema com isso e então percebi que era uma omissão boba, que suponho ser um erro recente para alguns de vocês. Quando entrei na discussão Xcode (4.3.1), deixei de fora o hífen inicial. Eu não teria feito isso se estivesse inserindo em uma linha de comando, mas na GUI eu o omiti. Eu não encontrei nenhuma diferença entre entrar em 2 args separados ou um (como alguns posts sugeriram). Então use:

-com.apple.CoreData.SQLDebug 1

e não simplesmente:

com.apple.CoreData.SQLDebug 1

que funcionou para mim tanto no simulador quanto no dispositivo real

user730458
fonte
3

Observe que você pode colocar diferentes níveis do valor passado. Que fornecem mais e mais verbosidade.

-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
fonte