Xcode 4 i podstawowe dane: Jak włączyć debugowanie SQL

102

Pracuję nad uniwersalną aplikacją na iOS i chciałbym widzieć surowy kod SQL w dziennikach podczas debugowania. W tym poście na blogu znajduje się kilka informacji o tym, jak włączyć rejestrowanie surowego kodu SQL na potrzeby tworzenia podstawowych danych systemu iOS. Podany przykład dotyczy Xcode 3 i po prostu nie jest dla mnie jasne, jak włączyć to w Xcode 4.

Wypróbowałem „Produkt” -> „Edytuj schemat” i dodałem „ -com.apple.CoreData.SQLDebug 1 ” do „Argumenty przekazane przy uruchomieniu”, ale nadal nie widzę żadnych danych wyjściowych w dziennikach. Nie jestem pewien, czy szukam w złym miejscu, czy po prostu niepoprawnie przekazuję argumenty.

oaldery
źródło
1
Dzięki za to. Moim głównym problemem jest to, że tabela, którą przeszukuję, ma nieco ponad 74 000 wierszy i chciałem się zorientować, jak długo trwają zapytania, ponieważ jest teraz dość wolny. Szanuję fakt, że dzieje się dużo abstrakcji, ale naprawdę nie wiedziałem, co się dzieje pod maską. To przynajmniej trochę mi pomaga.
oalders
Jeśli rozumiesz ograniczenia, dobrze jest przyjrzeć się surowemu kodowi SQL, zwłaszcza w celu poprawienia wydajności. Ludzie wpadają w kłopoty, próbując dowiedzieć się, jak zachowuje się graf obiektów, patrząc na surowy kod SQL. Ponieważ nie ma między nimi bezpośredniego związku, po prostu sprowadza ich na manowce.
TechZen

Odpowiedzi:

150

Powinieneś patrzeć w to samo miejsce, w którym otrzymujesz NSLOGS

I powinieneś przejść do Product -> Edit Scheme -> Następnie z lewego panelu wybierz Run YOURAPP.app i przejdź do zakładki Arguments w panelu głównym.

Tam możesz dodać argument przekazany przy uruchomieniu.

Należy dodać -com.apple.CoreData.SQLDebug 4(liczba od 1 do 4, wyższa liczba sprawia, że ​​jest bardziej szczegółowe)

Naciśnij OK i gotowe.

Kluczem jest tutaj edycja schematu, którego będziesz używać do testowania.

Nicolas S.
źródło
8
Dzięki za to. Okazuje się, że jeśli chodzi o symulator, format moich argumentów był nieprawidłowy, jak widzę w jednej z odpowiedzi tutaj stackoverflow.com/questions/822906/ ... Muszę przekazać argument -com.apple.CoreData.SQLDebug i drugi argument o wartości 1 , aby wyświetlić dane wyjściowe SQL.
Oalders
2
jakieś przemyślenia, jak wydrukować argumenty przekazywane do bazy danych? to podejście działa dobrze, aby zobaczyć strukturę zapytania, ale wyświetla tylko instrukcję sql, na przykład UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?i nie jest zbyt przydatne, aby naprawdę zobaczyć, jakie dane są wysyłane
Felipe Sabino
Właściwie pomyślałem, że lepiej byłoby dodać to jako prawdziwe pytanie SO;) stackoverflow.com/questions/12306343/…
Felipe Sabino
czy jest jakiś sposób, że mogę zalogować się tylko wtedy, gdy wstawia do bazy danych, a nie w innym przypadku?
Bishal Ghimire
@BishalGhimire Nie jestem pewien, może mógłbyś gdzieś filtrować według zdarzenia. Przefiltrowałbym dane wyjściowe bezpośrednio, używając filtrowania tekstu.
Nicolas S
20

XCode 4

Jest w tym samym miejscu, w którym zarządzam moim NSZombieEnabled

Produkt -> Edytuj schemat -> Uruchom debugowanie YouApp.app

W sekcji „Argumenty przekazywane przy uruchomieniu” wklej dokładnie:

-com.apple.CoreData.SQLDebug 1

Ostrzeżenie - te rzeczy są bardzo rozwlekłe, jeśli masz problemy z podstawowymi danymi, warto się temu przyjrzeć, ale może to być również więcej informacji niż potrzebujesz o niewłaściwej rzeczy.

OverToasty
źródło
Jakikolwiek sposób wydrukowania tego -com.apple.CoreData.MigrationDebug 1 w pliku string, aby użytkownik mógł załadować plik dziennika
rhlnair
5

Miałem z tym problem, a potem zdałem sobie sprawę, że to głupie pominięcie, które, jak sądzę, jest dla niektórych z was przyszłym błędem. Kiedy wprowadziłem argument Xcode (4.3.1), pominąłem wiodący myślnik. Nie zrobiłbym tego, gdybym wprowadzał to w wierszu poleceń, ale w GUI go pominąłem. Nie znalazłem żadnej różnicy między wejściem w 2 oddzielnych argumentach lub jednym (jak sugerowały niektóre posty). Więc użyj:

-com.apple.CoreData.SQLDebug 1

a nie tylko:

com.apple.CoreData.SQLDebug 1

który działał dla mnie zarówno w symulatorze, jak i rzeczywistym urządzeniu

user730458
źródło
3

Zauważ, że możesz ustawić różne poziomy przekazywanej wartości. Które zapewniają coraz więcej gadatliwości.

-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
źródło