【问题标题】:Is there a way to capture the output of NSLog on an iPhone when not connected to a debugger?没有连接到调试器时,有没有办法在 iPhone 上捕获 NSLog 的输出?
【发布时间】:2009-01-09 18:42:23
【问题描述】:

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

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

【问题讨论】:

    标签: iphone cocoa-touch nslog


    【解决方案1】:

    以下方法将在应用程序的 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

    【讨论】:

    • 如果您关心日志的大小,一个微小的变化就是将 freopen() 中的“a+”更改为“w”。但这产生了另一个警告,请确保在程序运行之间获取此文件,因为每次运行程序时都会从头开始重新创建(这可能与“太大”的文件一样大的障碍)
    • 谢谢 :) 可以将 de log 记录到文件并同时在 xcode 控制台上显示 NSLog 吗?
    【解决方案2】:

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

    【讨论】:

    • 好电话 - 我是 iPhone 开发新手,我知道如何查看 NSLog() 输出的唯一方法是在调试器控制台中。
    【解决方案3】:

    App Store 中还有一个Console 应用,但它仅适用于 iOS 6 及更早版本。

    iOS 7 发布时,it effectively stopped working。 (它现在只能读取自己的控制台日志,不能读取整个系统的日志。)

    【讨论】:

    • 考虑到这个问题的年龄、您的回答长度以及该应用程序是由“克里斯”开发的事实,也许您应该披露该应用程序可能是您自己制作的。 :)
    • 其实我不是这个软件的作者,虽然你是对的,我们有相同的名字。
    • 在这种情况下我深表歉意!
    • 知道这个应用程序是如何工作的吗?它是如何读取系统控制台日志的?
    • @keegan3d:曾经。不幸的是,在 iOS 7 发布后的某个时候,它失去了读取系统控制台日志的能力,只能读取自己的日志。所以这个应用程序不再好。我会更新答案以反映这一点。
    【解决方案4】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-12
      • 1970-01-01
      • 2020-09-20
      • 2014-01-21
      • 2010-10-11
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多