Xcode 4和核心数据:如何启用SQL调试


102

我正在使用通用的iOS应用程序,调试时希望在日志中看到原始SQL。这篇博客文章中有一些信息说明如何为iOS Core Data开发启用原始SQL日志记录。给定的示例适用于Xcode 3,但我不清楚如何在Xcode 4中启用它。

我已经尝试过“产品”->“编辑方案”,并将“ -com.apple.CoreData.SQLDebug 1 ” 添加到“启动时传递的参数”,但是在日志中仍然看不到任何输出。不知道我是在错误的位置还是只是错误地传递了参数。


1
谢谢你 我的主要问题是我要搜索的表刚刚超过74,000行,我想知道查询要运行多长时间,因为它现在很慢。我尊重这样一个事实,即存在大量的抽象,但是对于引擎盖下发生的事情,我真的是一无所知。这至少对我有一点帮助。
oalders 2011年

只要您了解这些限制,就可以查看原始SQL,特别是对于性能调整。人们遇到麻烦的地方是通过查看原始SQL来弄清楚对象图的行为方式。由于两者之间没有直接关系,因此只会使他们误入歧途。
TechZen 2011年

Answers:


150

您应该在获得NSLOGS的地方

然后,您应该转到产品->编辑方案->然后从左侧面板中选择Run YOURAPP.app,然后转到主面板的“参数”选项卡。

您可以在此处添加启动时传递的参数。

您应该添加-com.apple.CoreData.SQLDebug 4(数字1到4之间,数字越大,它越冗长)

按确定,一切就绪。

此处的关键是编辑将用于测试的方案。


8
谢谢你 事实证明,就模拟器而言,我的参数格式是错误的,正如我在此处的答案之一中所看到的stackoverflow.com/questions/822906/… 我需要传递-com.apple.CoreData.SQLDebug的参数第二个参数为1以便查看SQL输出。
oalders 2011年

2
关于如何打印传递到数据库的参数有什么想法?这种方法可以很好地查看查询的结构,但是它只打印sql语句,就像这样UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?,真正查看要发送的数据不是很有用
Felipe Sabino 2012年

其实,我认为这将是更好地将其添加为一个真正的SO问题;)stackoverflow.com/questions/12306343/...
菲利普·萨比诺

我有什么办法可以只在不插入数据库的情况下才能登录?
比沙尔·吉米尔

@BishalGhimire我不确定,也许您可​​以在某个地方按事件过滤。我将直接使用文本过滤来过滤输出。
Nicolas S

20

XCode 4

在我管理NSZombieEnabled的位置

产品->编辑方案->运行YouApp.app调试

在“启动时传递的参数”下,完全粘贴:

-com.apple.CoreData.SQLDebug 1

警告-这些东西非常冗长,如果您遇到核心数据问题,这也许很值得研究,但是它可能比您需要的有关错误信息的信息还多。


可以在字符串文件上打印此-com.apple.CoreData.MigrationDebug 1的任何方法,以便用户可以上载日志文件
rhlnair

5

我对此有疑问,然后意识到这是一个愚蠢的遗漏,我认为这对某些人来说是一个错误。当我在中输入参数时Xcode (4.3.1),我省略了前导连字符。如果我在命令行中输入它,我就不会这样做,但是在GUI中,我已经省略了它。我发现输入2个单独的参数或输入一个参数之间没有任何区别(正如一些帖子所建议的那样)。因此使用:

-com.apple.CoreData.SQLDebug 1

而不仅仅是:

com.apple.CoreData.SQLDebug 1

在模拟器和真实设备中为我工作的


3

请注意,您可以放入不同级别的传递值。其中提供了越来越详细的信息。

-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 ("?")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.