【发布时间】:2009-01-09 18:42:23
【问题描述】:
我正在使用NSLog() 记录大量数据。当我的 iPhone 没有连接到我的开发机器并在调试器下运行时,有没有办法捕获日志数据?
例如,我可以将它重定向到一个文件,然后稍后通过 Xcode 读回日志文件吗?我需要这样做以便在 WiFi 很差时测试我的应用程序,这需要我远离办公桌。
【问题讨论】:
标签: iphone cocoa-touch nslog
我正在使用NSLog() 记录大量数据。当我的 iPhone 没有连接到我的开发机器并在调试器下运行时,有没有办法捕获日志数据?
例如,我可以将它重定向到一个文件,然后稍后通过 Xcode 读回日志文件吗?我需要这样做以便在 WiFi 很差时测试我的应用程序,这需要我远离办公桌。
【问题讨论】:
标签: iphone cocoa-touch nslog
以下方法将在应用程序的 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
【讨论】:
我很确定 NSLog() 调用将被写入系统控制台日志,因此如果您在离线后将 iPhone 连接到计算机,您应该能够在 XCode Organizer 中查看控制台日志。唯一需要注意的是,控制台日志的大小有限,因此如果您进行大量日志记录,可能会删除较旧的条目。
【讨论】:
App Store 中还有一个Console 应用,但它仅适用于 iOS 6 及更早版本。
iOS 7 发布时,it effectively stopped working。 (它现在只能读取自己的控制台日志,不能读取整个系统的日志。)
【讨论】:
马克·诺瓦科夫斯基是对的。控制台输出会记录在手机上,当您将 Mac 连接到手机时,控制台输出会在管理器窗口中可用。
只需在设备面板中选择您的手机,然后选择控制台选项卡。最近的控制台输出就在那里。很酷。
我刚刚想通了。这在您描述需要远离计算机的情况下非常有用。
顺便说一句,我有一个解决方案可以满足您测试弱 WiFi 信号的需求。只需将手机用铝箔包裹起来,USB 数据线从铝箔包装中伸出即可。如果您正在运行它,您可以在调试器中单步执行代码。您无法操纵用户界面,但可以降低/消除 3D、WiFi 和 GPS 等无线电信号。如果你想降低信号强度但又不想完全消除,你可能需要尝试用箔纸部分覆盖手机,在覆盖物上打小孔等。
一个警告:不要将手机用箔纸包裹超过几分钟。它可能会过热。
【讨论】: