Xcode 4 dan Core Data: Cara mengaktifkan SQL Debugging

102

Saya sedang mengerjakan aplikasi iOS universal dan saya ingin melihat SQL mentah di log saat saya melakukan debug. Ada beberapa info di posting blog ini tentang cara mengaktifkan pencatatan SQL mentah untuk pengembangan Data Inti iOS. Contoh yang diberikan adalah untuk Xcode 3 dan tidak jelas bagi saya bagaimana mengaktifkannya di Xcode 4.

Saya sudah mencoba "Product" -> "Edit Scheme" dan menambahkan " -com.apple.CoreData.SQLDebug 1 " ke "Arguments Passed on Launch", tapi saya masih belum melihat output apa pun di log. Tidak yakin apakah saya mencari di tempat yang salah atau hanya menyampaikan argumen dengan tidak benar.

oalders
sumber
1
Terima kasih untuk ini. Masalah utama saya adalah tabel yang saya cari memiliki lebih dari 74.000 baris dan saya ingin mendapatkan gambaran tentang berapa lama kueri berjalan, karena saat ini cukup lambat. Saya menghormati fakta bahwa ada banyak abstraksi yang terjadi, tetapi saya benar-benar tidak tahu apa yang terjadi di balik terpal. Ini setidaknya membantu saya sedikit.
oalders
Selama Anda memahami batasannya, tidak masalah untuk melihat SQL mentah, terutama untuk penyesuaian kinerja. Di mana orang mendapat masalah adalah mencoba mencari tahu bagaimana grafik objek berperilaku dengan melihat SQL mentah. Karena tidak ada hubungan langsung antara keduanya, itu hanya menyesatkan mereka.
TechZen

Jawaban:

150

Anda harus melihat di tempat yang sama Anda mendapatkan NSLOGS

Dan Anda harus Pergi ke Produk -> Edit Skema -> Kemudian dari panel kiri pilih Jalankan YOURAPP.app dan pergi ke Tab Argumen panel utama.

Di sana Anda bisa menambahkan Argument Passed On Launch.

Anda harus menambahkan -com.apple.CoreData.SQLDebug 4(angka antara 1 dan 4, angka yang lebih tinggi membuatnya lebih bertele-tele)

Tekan OK dan Anda sudah siap.

Kuncinya di sini adalah mengedit skema yang akan Anda gunakan untuk pengujian.

Nicolas S
sumber
8
Terima kasih untuk ini. Ternyata, sejauh simulator berjalan, format argumen saya salah seperti yang saya lihat di salah satu jawaban di sini stackoverflow.com/questions/822906/… Saya harus menyampaikan argumen -com.apple.CoreData.SQLDebug dan argumen kedua 1 untuk melihat keluaran SQL.
oalders
2
ada pemikiran tentang cara mencetak argumen yang diteruskan ke database? pendekatan ini berfungsi dengan baik untuk melihat bagaimana kueri disusun, tetapi hanya mencetak pernyataan sql, seperti UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?dan tidak terlalu berguna untuk benar-benar melihat apa data yang dikirim
Felipe Sabino
Sebenarnya, saya pikir akan lebih baik menambahkannya sebagai pertanyaan SO yang sebenarnya;) stackoverflow.com/questions/12306343/…
Felipe Sabino
apakah ada cara saya bisa masuk hanya jika itu dimasukkan ke dalam database bukan untuk kasus lain?
Bishal Ghimire
@BishalGhimire Saya tidak yakin, mungkin Anda bisa memfilter berdasarkan acara di suatu tempat. Saya akan memfilter output secara langsung menggunakan pemfilteran teks.
Nicolas S
20

XCode 4

Itu di tempat yang sama saya mengelola NSZombieEnabled saya

Produk -> Edit Skema -> Jalankan YouApp.app Debug

Di bawah "Arguments Passed on Launch", tempel persis:

-com.apple.CoreData.SQLDebug 1

Peringatan - hal ini sangat bertele-tele, jika Anda mengalami masalah Data Inti, ini mungkin layak untuk dilihat, tetapi mungkin juga lebih banyak info daripada yang Anda butuhkan tentang hal yang salah.

OverToasty
sumber
Cara apapun untuk mencetak -com.apple.CoreData.MigrationDebug 1 ini pada file string, sehingga pengguna dapat mengunggah file log
rhlnair
5

Saya mengalami masalah dengan ini dan kemudian menyadari bahwa itu adalah kelalaian yang konyol, yang saya anggap sebagai kesalahan besar bagi sebagian dari Anda. Saat saya memasukkan argumen Xcode (4.3.1), saya meninggalkan tanda hubung di depannya. Saya tidak akan melakukannya jika saya memasukkannya pada baris perintah, tetapi di GUI saya telah menghilangkannya. Saya tidak menemukan perbedaan apa pun antara memasukkan pada 2 argumen terpisah atau satu (seperti yang disarankan beberapa posting). Jadi gunakan:

-com.apple.CoreData.SQLDebug 1

dan tidak hanya:

com.apple.CoreData.SQLDebug 1

yang berfungsi untuk saya di simulator dan perangkat nyata

pengguna730458
sumber
3

Perhatikan bahwa Anda dapat memasukkan level berbeda dari nilai yang diteruskan. Yang memberikan lebih banyak verbositas.

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