14

我正在记录一堆数据NSLog()。当我的 iPhone 没有连接到我的开发机器并在调试器下运行时,有没有办法捕获日志数据?

例如,我可以将它重定向到一个文件,然后稍后通过 Xcode 读回日志文件吗?我需要这样做以便在 WiFi 很差时测试我的应用程序,这需要我远离办公桌。

4

4 回答 4

28

下面的方法将在您的应用程序的 Documents 文件夹中创建一个文件名“console.log”,以便您以后阅读它。

在程序开始时调用此方法:

- (void) redirectConsoleLogToDocumentFolder
{
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  NSString *logPath = [documentsDirectory stringByAppendingPathComponent:@"console.log"];
  freopen([logPath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
}

日志永远不会被删除,因此请谨慎使用。

在现场测试应用程序后,将手机重新连接到 Mac,在 Xcode 中打开管理器。在“摘要”面板中,您拥有手机上所有应用程序的列表。展开你正在调试的那个,你会看到一个名为“Application Data”的包。

单击其名称右侧的箭头并保存。您将以一个文件夹结尾,该文件夹的名称为您的 Bundle Identifier,后跟一个日期。

在此文件夹中,您将找到您的 Documents 文件夹,其中应包含 console.log

于 2009-01-09T20:50:29.550 回答
17

我很确定 NSLog() 调用将被写入系统控制台日志,因此如果您在离线后将 iPhone 连接到计算机,您应该能够在 XCode Organizer 中查看控制台日志。唯一需要注意的是控制台日志的大小是有限的,因此如果您进行大量日志记录,旧条目可能会被删除。

于 2009-01-09T19:09:55.820 回答
5

App Store 中还有一个控制台应用程序,但它仅适用于 iOS 6 及更早版本。

当 iOS 7 出来时,它实际上停止了工作。(它现在只能读取自己的控制台日志,而不是整个系统的日志。)

于 2011-06-19T22:17:51.707 回答
2

马克·诺瓦科夫斯基是对的。控制台输出记录在手机上,当您将 Mac 连接到手机时,控制台输出在管理器窗口中可用。

只需在设备面板中选择您的手机,然后选择控制台选项卡。最近的控制台输出就在那里。很酷。

我只是想通了。这在您描述需要远离计算机的情况下非常有帮助。

顺便说一句,我有一个解决方案来满足您测试弱 WiFi 信号的需求。只需将您的手机用铝箔包裹起来,USB 数据线从铝箔包装中伸出即可。如果您正在运行它,您可以单步执行调试器中的代码。您无法操纵用户界面,但可以降低/消除 3D、WiFi 和 GPS 等无线电信号。如果你想降低信号强度但又不想完全取消,你可能需要尝试用箔纸部分覆盖手机,在覆盖物上打小孔等。

一个警告:不要一次将手机用箔纸包裹超过几分钟。它可能会过热。

于 2009-11-14T01:58:09.103 回答