Xcode 4 и основные данные: как включить отладку SQL

102

Я работаю над универсальным приложением для iOS и хотел бы видеть необработанный SQL в журналах при отладке. В этом сообщении блога есть информация о том, как включить ведение журнала необработанного SQL для разработки iOS Core Data. Данный пример предназначен для Xcode 3, и мне просто непонятно, как включить это в Xcode 4.

Я пробовал «Продукт» -> «Изменить схему» и добавил « -com.apple.CoreData.SQLDebug 1 » в «Аргументы, передаваемые при запуске », но я все еще не вижу никаких результатов в журналах. Не уверен, что ищу не в том месте или просто неправильно передаю аргументы.

овчарки
источник
1
Спасибо за это. Моя основная проблема заключается в том, что в таблице, в которой я ищу, чуть более 74000 строк, и я хотел получить представление о том, как долго выполняются запросы, поскольку сейчас это довольно медленно. Я уважаю тот факт, что происходит много абстракций, но я действительно был в неведении относительно того, что происходило под капотом. Это хоть немного помогает мне.
oalders 01
Пока вы понимаете ограничения, можно смотреть на необработанный SQL, особенно для настройки производительности. Когда люди попадают в затруднительное положение, они пытаются понять, как ведет себя граф объектов, глядя на необработанный SQL. Поскольку между ними нет прямой связи, это просто сбивает их с пути.
TechZen 01

Ответы:

150

Вы должны смотреть в том же месте, где и NSLOGS

И вы должны перейти в Product -> Edit Scheme -> Затем на левой панели выберите Run YOURAPP.app и перейдите на вкладку Arguments на главной панели.

Там вы можете добавить аргумент, передаваемый при запуске.

Вы должны добавить -com.apple.CoreData.SQLDebug 4(число от 1 до 4, большее число делает его более подробным)

Нажмите ОК, и все готово.

Ключевым моментом здесь является редактирование схемы, которую вы будете использовать для тестирования.

Николас С
источник
8
Спасибо за это. Оказывается, что касается симулятора, формат моих аргументов был неправильным, как я вижу в одном из ответов здесь stackoverflow.com/questions/822906/ ... Мне нужно передать аргумент -com.apple.CoreData.SQLDebug и второй аргумент 1 , чтобы увидеть вывод SQL.
oalders
2
есть мысли о том, как распечатать аргументы, которые передаются в базу данных? этот подход отлично работает, чтобы увидеть, как структурируется запрос, но он печатает только оператор sql, например, UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?и не очень полезно действительно видеть, какие данные отправляются
Фелипе Сабино
На самом деле, я подумал, что лучше было бы добавить его как настоящий SO-вопрос;) stackoverflow.com/questions/12306343/…
Фелипе Сабино
есть ли способ, которым я могу войти, только если он вставляется в базу данных не для другого случая?
Bishal Ghimire
@BishalGhimire Я не уверен, возможно, вы могли бы отфильтровать где-нибудь по событию. Я бы отфильтровал вывод напрямую, используя текстовую фильтрацию.
Nicolas S
20

XCode 4

Это то же место, где я управляю своим NSZombieEnabled

Продукт -> Изменить схему -> Запустить YouApp.app Debug

В разделе «Аргументы, переданные при запуске» вставьте точно:

-com.apple.CoreData.SQLDebug 1

Предупреждение - это очень подробный материал, если у вас есть проблемы с Core Data, возможно, стоит взглянуть на него, но это также может быть больше информации, чем вам нужно, о неправильном.

OverToasty
источник
Любой способ распечатать это -com.apple.CoreData.MigrationDebug 1 в строковом файле, чтобы пользователь мог загрузить файл журнала
rhlnair
5

У меня возникла проблема с этим, а затем я понял, что это было глупое упущение, которое, как я полагаю, является ошибкой для некоторых из вас. Когда я ввел аргумент Xcode (4.3.1), я опустил ведущий дефис. Я бы не сделал этого, если бы ввел его в командной строке, но в графическом интерфейсе я его пропустил. Я не нашел никакой разницы между вводом двух отдельных аргументов или одного (как предлагалось в некоторых сообщениях). Так что используйте:

-com.apple.CoreData.SQLDebug 1

и не просто:

com.apple.CoreData.SQLDebug 1

это сработало для меня как в симуляторе, так и на реальном устройстве

user730458
источник
3

Обратите внимание, что вы можете указать разные уровни переданного значения. Которые обеспечивают все больше и больше многословия.

-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 ("?")
пользователь сети
источник