23

如何在使用 Core Data SQL Debug 时打印发送到 sqlite 数据库的值?

在我的“ Arguments Passed on Launch ”调试选项中使用“ -com.apple.CoreData.SQLDebug 1 ”可以很好地打印 SQL 结构

(你可以在这里查看如何使用它:XCode4 and Core Data: How to enable SQL Debugging

但问题是打印的 NSLog 类似于UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?,如果您试图查看完整的 SQL 语句和/或发送到数据库的数据是什么,它根本没有帮助。

4

2 回答 2

38

在 Xcode 中打开“Product -> Scheme -> Edit Scheme...”并添加到“Arguments Passed on Launch”:

-com.apple.CoreData.SQLDebug 3
-com.apple.CoreData.Logging.stderr 1 

(iOS 10/macOS 10.12 或更高版本上的 Core Data 调试需要第二个启动参数,请参阅com.apple.CoreData.SQLDebug not working了解更多信息。)

您将看到 SQL 语句绑定到的所有值。示例输出:

test56[1588:c07] CoreData: sql: BEGIN EXCLUSIVE
test56[1588:c07] CoreData: sql: INSERT INTO ZEVENT(Z_PK, Z_ENT, Z_OPT, ZTIMESTAMP) VALUES(?, ?, ?, ?)
test56[1588:c07] CoreData: details: SQLite bind[0] = (int64)13
test56[1588:c07] CoreData: details: SQLite bind[1] = (int64)1
test56[1588:c07] CoreData: details: SQLite bind[2] = (int64)1
test56[1588:c07] CoreData: details: SQLite bind[3] = "368650709.435904"
test56[1588:c07] CoreData: sql: COMMIT
于 2012-09-06T18:49:50.503 回答
3

如果您使用的是 Xcode 8,您还需要添加额外的参数

-com.apple.CoreData.Logging.stderr 1
于 2016-09-28T11:13:27.497 回答