我正在用NSLog()
记录一堆数据。当我的iPhone没有连接到我的开发机器并在调试器下运行时,有没有办法捕获日志数据?当没有连接到调试器时,有没有办法在iPhone上捕获NSLog的输出?
例如,我可以将它重定向到一个文件,然后在以后通过Xcode读取日志文件吗?我需要这样做,以便在WiFi很差时测试我的应用程序,这就要求我远离办公桌。
我正在用NSLog()
记录一堆数据。当我的iPhone没有连接到我的开发机器并在调试器下运行时,有没有办法捕获日志数据?当没有连接到调试器时,有没有办法在iPhone上捕获NSLog的输出?
例如,我可以将它重定向到一个文件,然后在以后通过Xcode读取日志文件吗?我需要这样做,以便在WiFi很差时测试我的应用程序,这就要求我远离办公桌。
我很确定NSLog()调用将被写入系统控制台日志,所以如果你离线后将你的iPhone连接到你的计算机上,你应该能够查看XCode Organizer中的控制台日志。唯一需要注意的是控制台日志的大小是有限的,所以如果你做了大量的日志记录,那么较旧的条目可能会被忽略。
下面的方法将在您的应用程序的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);
}
日志永远不会被删除,所以请谨慎使用。
一旦您在现场测试了您的应用程序,请在Xcode中将您的手机重新连接到Mac,然后打开管理器。在摘要面板中,您可以看到手机上所有应用程序的列表。展开你正在调试的那个,你会看到一个名为“Application Data”的包。
点击其名称右侧的箭头并保存。 你将以一个包含你的Bundle Identifier名称和一个日期的文件夹结束。
这个文件夹,你会发现你的文档文件夹,它应该包含的console.log
如果你关心日志的大小,一个小小的改变就是在freopen()中将“a +”改为“w”。但是这会产生另一个警告,请务必在程序运行之间获取此文件,因为每次程序运行时都会从头开始重新创建此文件(这可能与“太大”文件一样是一个阻碍) – KevinDTimm 2010-01-09 17:13:30
谢谢:)可以将de log记录到文件并同时在xcode控制台上显示NSLog? – 2012-05-17 10:55:19
马克Novakowski里面是正确的。控制台输出会在手机上登录,当您将Mac连接到手机时,控制台输出在管理器窗口中可用。
只需在设备面板中选择您的手机,然后选择控制台选项卡即可。最近的控制台输出将在那里。很酷。
我刚刚明白了这一点。这在你描述你需要远离计算机的情况下会非常有用。
顺便说一句,我有一个解决方案,您需要测试弱WiFi信号。只需用铝箔包裹手机,USB电缆从铝箔包装纸上伸出即可。如果您正在使用它进行连接,则可以单步执行调试器中的代码。您无法操作用户界面,但可以降低/消除3D,WiFi和GPS等无线电信号。如果您想降低信号强度但不能完全取消信号强度,则可能需要尝试用箔片部分覆盖手机,在覆盖物上放置小孔等。
一个警告:不要让手机缠绕一次放入箔中超过几分钟。它可能会过热。
App Store中还有一个Console应用程序,但它仅适用于iOS 6及更早版本。
当iOS 7出来时,it effectively stopped working。 (它现在只能读取自己的控制台日志,而不能读取整个系统的日志。)
良好的调用 - 我是iPhone开发的新手,我知道如何看到NSLog()的输出的唯一方法是在调试器控制台中。 – 2009-01-09 19:21:34