Xcode 4 và dữ liệu cốt lõi: Cách bật tính năng gỡ lỗi SQL


102

Tôi đang làm việc trên một ứng dụng iOS phổ biến và tôi muốn thấy SQL thô trong nhật ký khi tôi gỡ lỗi. Có một số thông tin trong bài đăng blog này về cách bật ghi nhật ký SQL thô để phát triển Dữ liệu cốt lõi của iOS. Ví dụ đã cho là dành cho Xcode 3 và tôi không rõ làm thế nào để kích hoạt điều này trong Xcode 4.

Tôi đã thử "Sản phẩm" -> "Chỉnh sửa lược đồ" và thêm " -com.apple.CoreData.SQLDebug 1 " vào "Đối số được chuyển khi khởi chạy", nhưng tôi vẫn không thấy bất kỳ đầu ra nào trong nhật ký. Không chắc liệu tôi có đang nhìn nhầm chỗ hay chỉ truyền các đối số không chính xác.


1
Cảm ơn vì điều đó. Vấn đề chính của tôi là bảng mà tôi đang tìm kiếm chỉ có hơn 74.000 hàng và tôi muốn biết các truy vấn đang chạy trong bao lâu, vì hiện tại nó khá chậm. Tôi tôn trọng thực tế là có rất nhiều điều trừu tượng đang diễn ra, nhưng tôi thực sự chìm trong bóng tối về những gì đang diễn ra. Điều này ít nhất cũng giúp tôi một chút.
oalders

Miễn là bạn hiểu các hạn chế, bạn có thể xem xét SQL thô, đặc biệt là để điều chỉnh hiệu suất. Nơi mọi người gặp khó khăn là cố gắng tìm ra cách biểu đồ đối tượng hoạt động bằng cách xem SQL thô. Vì không có mối quan hệ trực tiếp nào giữa hai người, điều đó chỉ khiến họ lạc lối.
TechZen

Câu trả lời:


150

Bạn nên xem xét cùng một nơi bạn nhận được NSLOGS

Và bạn nên vào Sản phẩm -> Chỉnh sửa lược đồ -> Sau đó từ bảng điều khiển bên trái, chọn Chạy ứng dụng YOURAPP.app và chuyển đến Tab Đối số của bảng điều khiển chính.

Ở đó bạn có thể thêm một đối số được chuyển khi khởi chạy.

Bạn nên thêm -com.apple.CoreData.SQLDebug 4(số từ 1 đến 4, số cao hơn làm cho nó dài hơn)

Nhấn OK và bạn đã hoàn tất.

Chìa khóa ở đây là chỉnh sửa lược đồ bạn sẽ sử dụng để thử nghiệm.


8
Cảm ơn vì điều đó. Hóa ra, theo như trình mô phỏng, định dạng của các đối số của tôi đã sai khi tôi thấy trong một trong các câu trả lời ở đây stackoverflow.com/questions/822906/… Tôi cần chuyển đối số -com.apple.CoreData.SQLDebug và đối số thứ hai là 1 để xem đầu ra SQL.
oalders

2
bất kỳ suy nghĩ về cách in các đối số được chuyển đến cơ sở dữ liệu? phương pháp này hoạt động tốt để xem cách truy vấn đã được cấu trúc, nhưng nó chỉ in báo cáo sql, như UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?và nó không phải là rất hữu ích để thực sự nhìn thấy những gì là dữ liệu được gửi
Felipe Sabino

Thực ra, tôi nghĩ rằng nó sẽ tốt hơn để thêm nó như là một câu hỏi SO sản;) stackoverflow.com/questions/12306343/...
Felipe Sabino

có cách nào tôi có thể đăng nhập chỉ khi nó chèn vào cơ sở dữ liệu không cho trường hợp khác?
Bishal Ghimire

@BishalGhimire Tôi không chắc, có thể bạn có thể lọc theo sự kiện ở đâu đó. Tôi sẽ lọc đầu ra trực tiếp bằng cách sử dụng lọc văn bản.
Nicolas S

20

XCode 4

Nó ở cùng nơi tôi quản lý NSZombieEnabled của mình

Sản phẩm -> Chỉnh sửa lược đồ -> Chạy YouApp.app Debug

Trong "Đối số được chuyển khi khởi chạy", hãy dán chính xác:

-com.apple.CoreData.SQLDebug 1

Cảnh báo - nội dung này rất dài dòng, nếu bạn đang gặp vấn đề về Dữ liệu cốt lõi, điều này có thể rất đáng xem xét, nhưng nó cũng có thể có nhiều thông tin hơn bạn cần về điều sai.


Bất kỳ cách nào để in -com.apple.CoreData.MigrationDebug này 1 trong hồ sơ chuỗi, do đó người dùng có thể tải lên các tập tin đăng nhập
rhlnair

5

Tôi đã gặp vấn đề với điều này và sau đó nhận ra đó là một thiếu sót ngớ ngẩn, mà tôi cho rằng đó là một sai lầm của một số bạn. Khi tôi nhập đối số vào Xcode (4.3.1), tôi đã bỏ đi dấu gạch ngang ở đầu. Tôi sẽ không làm như vậy nếu tôi nhập nó trên một dòng lệnh, nhưng trong GUI, tôi đã bỏ qua nó. Tôi không tìm thấy bất kỳ sự khác biệt nào giữa việc nhập ở 2 trang riêng biệt hoặc một (như một số bài viết đã đề xuất). Vì vậy, hãy sử dụng:

-com.apple.CoreData.SQLDebug 1

và không chỉ đơn giản là:

com.apple.CoreData.SQLDebug 1

điều đó đã làm việc cho tôi trong cả trình mô phỏng và thiết bị thực


3

Lưu ý rằng bạn có thể đặt các cấp giá trị khác nhau. Mà cung cấp nhiều hơn và nhiều chi tiết hơn.

-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 ("?")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.