Xcode 4 ve Temel Veriler: SQL Hata Ayıklama nasıl etkinleştirilir


102

Evrensel bir iOS uygulaması üzerinde çalışıyorum ve hata ayıklarken günlüklerde ham SQL'i görmek istiyorum. Bu blog gönderisinde , iOS Çekirdek Veri geliştirme için ham SQL günlüğünün nasıl etkinleştirileceği hakkında bazı bilgiler var . Verilen örnek Xcode 3 içindir ve bunu Xcode 4'te nasıl etkinleştireceğimi bilmiyorum.

"Ürün" -> " Şemayı Düzenle" yi denedim ve " Başlatıldığında Aktarılan Bağımsız Değişkenler" e " -com.apple.CoreData.SQLDebug 1 " ekledim , ancak günlüklerde hala herhangi bir çıktı görmüyorum. Yanlış yere mi baktığımdan yoksa argümanları yanlış mı ilettiğimden emin değilim.


1
Bunun için teşekkürler. Ana sorunum, aradığım tablonun 74.000'den fazla satıra sahip olması ve şu anda oldukça yavaş olduğu için sorguların ne kadar süredir çalıştığına dair bir fikir edinmek istedim. Çok fazla soyutlamanın olduğu gerçeğine saygı duyuyorum, ama kaputun altında neler olduğu konusunda gerçekten karanlıktaydım. Bu en azından bana biraz yardımcı oluyor.
oalders

Sınırlamaları anladığınız sürece, özellikle performans ayarlaması için ham SQL'e bakmanızda bir sakınca yoktur. İnsanların başını belaya soktuğu yer, ham SQL'e bakarak nesne grafiğinin nasıl davrandığını anlamaya çalışmaktır. İkisi arasında doğrudan bir ilişki olmadığı için, bu onları yoldan çıkarır.
TechZen

Yanıtlar:


150

NSLOGS aldığınız yere bakıyor olmalısınız

Ve Ürün -> Şemayı Düzenle -> Ardından sol panelden YOURAPP.app Çalıştır'ı seçin ve ana panelin Argümanlar Sekmesine gidin.

Orada, Başlatıldığında Geçirilen bir Argüman ekleyebilirsiniz.

Eklemelisiniz -com.apple.CoreData.SQLDebug 4(1 ile 4 arasında sayı, daha yüksek sayı onu daha ayrıntılı yapar)

Tamam'a basın ve her şey hazır.

Buradaki anahtar, test için kullanacağınız şemayı düzenlemektir.


8
Bunun için teşekkürler. Görünüşe göre, simülatör gittiği sürece, buradaki cevaplardan birinde gördüğüm kadarıyla argümanlarımın biçimi yanlıştı stackoverflow.com/questions/822906/… -com.apple.CoreData.SQLDebug argümanını iletmem gerekiyor ve SQL çıktısını görmek için ikinci argüman 1 .
oalders

2
Veritabanına aktarılan argümanların nasıl yazdırılacağı hakkında herhangi bir fikriniz var mı? bu yaklaşım, sorgunun nasıl yapılandırıldığını görmek için iyi çalışıyor, ancak yalnızca sql ifadesini yazdırıyor UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?ve gönderilen verinin ne olduğunu gerçekten görmek pek kullanışlı değil
Felipe Sabino

Aslında, bunu gerçek bir SO sorusu olarak eklemenin daha iyi olacağını düşündüm;) stackoverflow.com/questions/12306343/…
Felipe Sabino

Sadece başka bir durum için değil veritabanına girerse oturum açabilmemin bir yolu var mı?
Bishal Ghimire

@BishalGhimire Emin değilim, belki bir yerde olaya göre filtreleyebilirsiniz. Çıkışı doğrudan metin filtrelemeyi kullanarak filtrelerdim.
Nicolas S

20

XCode 4

NSZombieEnabled'ımı yönettiğim yerde

Ürün -> Şemayı Düzenle -> YouApp.app Hata Ayıklamasını Çalıştır

"Başlatma Sırasında Geçirilen Bağımsız Değişkenler" altında, tam olarak şunları yapıştırın:

-com.apple.CoreData.SQLDebug 1

Uyarı - bu şeyler çok ayrıntılı, Çekirdek Veri sorunları yaşıyorsanız, buna bakmaya değer olabilir, ancak aynı zamanda yanlış şey hakkında ihtiyaç duyduğunuzdan daha fazla bilgi de olabilir.


Bu -com.apple.CoreData.MigrationDebug 1'i dize dosyasına yazdırmanın herhangi bir yolu, böylece kullanıcı günlük dosyasını yükleyebilir
rhlnair

5

Bununla ilgili bir sorun yaşıyordum ve sonra bunun aptalca bir ihmal olduğunu fark ettim, ki bazılarınız için bir başlangıç ​​hatası olduğunu varsayıyorum. Tartışmaya girdiğimde Xcode (4.3.1)baştaki kısa çizgiyi atladım. Bir komut satırından giriyor olsaydım bunu yapmazdım, ancak GUI'de bunu atlamıştım. 2 ayrı argüman ile bir tane girmek arasında bir fark bulamadım (bazı yayınların önerdiği gibi). Öyleyse kullan:

-com.apple.CoreData.SQLDebug 1

ve basitçe değil:

com.apple.CoreData.SQLDebug 1

hem simülatörde hem de gerçek cihazda benim için çalıştı


3

Geçilen değerin farklı düzeylerini koyabileceğinizi unutmayın. Bu da giderek daha fazla ayrıntı sağlar.

-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 ("?")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.