iOS(iPhone、iPad、iPod Touch)查看实时控制台日志终端

137

有没有一种方法可以实时查看控制台日志,以实时查看NSLog和其他调试消息,例如adb logcat?

有没有一种方式可以像使用adb logcat一样实时查看控制台日志,以便查看NSLog和其他调试信息?

1
你是说你想要一些类似于“Utilities/Console.app”的IOS等效工具吗? - BryanH
可能是重复的问题:objective c iphone : can we view console log on device - progrmr
10个回答

165

苹果在技术问答QA1747中记录的解决方案:调试已部署的iOS应用程序适用于Xcode 6,步骤如下:

  1. 从Xcode菜单中选择“窗口” -> “设备”。
  2. 选择左列中的设备。
  3. 点击右侧面板底部左侧的上三角形以显示设备控制台。

带有上三角形的屏幕截图


5
在我看来,这是最简单的解决方案。 - Bart van Kuik
4
我已经添加了一个带有向上三角形图标的截图。 - Marián Černý
1
print语句不会被记录到日志中,只会输出到stdout。请使用NSLog代替。或者可以通过添加一些代码将stdout重定向到文件中。崩溃信息会被记录下来,并且可以通过“查看设备日志”按钮进行访问。 - Marián Černý
如果它有一个过滤器,这样你就不必看到它吐出的大量垃圾。@cbowns的解决方案更好,因为你可以在上面使用grep。 - Nathan F.
3
这个按钮在 xCode 9.3 中已被废弃。现在有一个名为 "Console.app" 的按钮,更加合理。 - rustyMagnet
显示剩余5条评论

86
两个选项: libimobiledevice 可以通过Homebrew安装,并且非常好用。它的idevicesyslog工具类似于下面的deviceconsole,并且支持无线查看设备的系统日志(!) 我在Tumblr上写了更多关于此事的内容。tl;dr:
brew install libimobiledevice
idevice_id --list // list available device UDIDs
idevicesyslog -u <device udid>

使用USB连接设备或通过本地无线网络可用。


(保留历史记录,来自2013年:)rpetrich的deviceconsole比上面的ideviceconsole少了很多疯狂的解决方案。我的fork版本可以直接在Xcode 5中构建和运行,Build操作将二进制文件安装到/usr/local/bin以便于使用。

作为额外的有用信息,我使用以下样式使其易于在shell历史记录中找到我想要的设备,并删除deviceconsole打印出来的不必要的>行。

deviceconsole -d -u <device UDID> | uniq -u && echo "<device name>"

感谢您的这篇文章。正是我一直在寻找的内容。我迫不及待地想将iOS添加到我的GUI移动LogCat工具中:https://github.com/yepher/LogCat - Yepher
2
这太棒了 - 编译和运行只用了2分钟。这应该是被接受的答案。 - Nick Farina
这是一个非常好的解决方案。并且我想补充一点,这个集合对于iOS8仍然有效(就像应该做的一样!) - Kelly
1
@BugaBuga 确保你正在使用最新的 libimobiledevice。(有线和无线日志查看在我的 Mac 上 10.11 和我的 iPhone 上 iOS 10.2 上都可以工作) - cbowns
1
使用以下命令:brew install --HEAD libimobiledevice,可以解决 https://github.com/libimobiledevice/libimobiledevice/issues/356 问题。我已经验证过了。 - rustyMagnet
显示剩余7条评论

79

编辑:请使用 @cbowns 的解决方案,deviceconsole 可兼容 iOS9 且更易于使用。

这是一个开源程序,可以在终端中显示 iDevice 的系统日志(类似于 tail -F)。不需要越狱,并且输出完全可搜索,因此您可以过滤以仅查看来自您的程序的输出。这种解决方案特别好的地方在于您可以查看日志,无论应用程序是否从 XCode 中启动了调试模式。

以下是具体步骤:

从我的 github 帐户中获取 Mac OS X 的 libimobiledevice 二进制文件 https://github.com/benvium/libimobiledevice-macosx/zipball/master

按照这里的安装说明: https://github.com/benvium/libimobiledevice-macosx/blob/master/README.md

连接您的设备,打开 Terminal.app 并键入:

idevicesyslog

这会弹出设备系统日志的实时显示。

由于它是一个控制台应用程序,您可以使用类Unix命令(如grep)过滤日志。

例如,查看特定应用程序的所有日志消息:

idevicesyslog | grep myappname

这段内容来自我的博客,地址为http://pervasivecode.blogspot.co.uk/2012/06/view-log-output-of-any-app-on-iphone-or.html


4
看起来这在 iOS 模拟器上不起作用。很遗憾。"没有找到设备,它插好了吗?" - ashes999
它无法在iOS10上运行。"usbmuxd_send: Error -1 when sending: Broken pipe" 如何解决? - Victor Choy
2
当我不使用sudo运行idevicesys时,会出现一个关于“无法启动服务com.apple.syslog_relay”的神秘错误。也许这取决于你如何安装它或其他一些因素。 - Bjorn Roche
如果这个命令无法正常工作,请执行以下操作: brew uninstall libimobiledevice ideviceinstaller && brew install --HEAD libimobiledevice ideviceinstaller - Akshet

32

只需在Mac OS X上打开应用程序Console.app

您可以在应用程序 > 实用工具 > 控制台下找到它。

在应用程序的左侧列出了所有连接的设备。


2
这是一个很棒的解决方案。我可以使用搜索功能基本上像“grep”一样搜索我的设备的实时/“现在”日志。 - Rob
1
太棒了!这应该是正确的答案。 - Caio Santos
您甚至可以通过应用各种过滤器(如进程名称、日期和时间等)来搜索日志。 - desu sai venkat
这应该是被接受的答案。 - undefined

14

试用免费软件iOS Console。只需下载,启动,连接您的设备--et voila!


1
有趣的是,但如果我连接了多个设备到 Mac 上,它不会让我选择要查看控制台日志的设备。 - leolobato
非常简单,在iOS 12上运行得很好,我对开发人员应该多么简单地记录日志感到沮丧,最终来到了这里。谢谢Peter。 - FreeAppl3
为什么不使用 macOS 上原生自带的 Console.app - rustyMagnet

6

是的...但由于它位于GUI窗口内部,因此Xcode组织器上的控制台实时性较差。我希望有一种方法可以直接在设备上调用shell来执行tail -f <logfilename>。 - Arunabh Das
只有越狱的设备才能获取其 shell。 - progrmr
谢谢程序员。我想接受您的答案作为正确答案。您能否也请发布任何有关在越狱设备上获取shell的操作指南链接?谢谢! - Arunabh Das
@ArunabhDas 请考虑将已接受的答案更改为来自Ben Clayton的idevicesyslog答案。他的解决方案正是我在使用CoronaSDK平台的iOS应用程序调试应用内购买时所寻找的。Xcode组织器在查看日志信息时速度缓慢且繁琐。 - Anthony F

5

1
该链接已失效。我相信该应用程序的更新名称为Apple Configurator,并可在此处获得:https://itunes.apple.com/us/app/apple-configurator/id434433123?mt=12 但是,它需要OS X 10.10+。 - ThomasW
1
@ThomasW:不幸的是,与iPhone配置实用程序相比,苹果配置器似乎没有查看设备日志的功能。 - newenglander
1
可以的。只需从菜单中安装自动化工具即可。http://krypted.com/iphone/install-the-command-line-tools-using-apple-configurator-2/ - Sune Kjærgård

2
您有三种选择:
  • Xcode组织者
  • 已越狱的设备,带有syslogd + openSSH
  • 使用dup2将所有STDERR和STDOUT重定向到文件,然后“tail -f”该文件(由于您仍然面临在设备上尾随文件的问题,因此最后一个选项更像是模拟器问题)。
因此,要获得第二个选项,您只需要从Cydia安装syslogd和OpenSSH,在获取syslogd之后需要重新启动;现在只需打开到您的设备的ssh会话(通过终端或Windows上的putty),然后键入“tail -f /var/log/syslog”。这样,您就可以获得无线实时系统日志。
如果您想尝试第三个选项,只需在线搜索“dup2”,它是一个系统调用。

0

要在Mac上的Safari中查看您的iOS设备的控制台(仅适用于Mac):

  1. 在您的iOS设备上,转到“设置”>“Safari”>“高级”,然后打开Web检查器
  2. 在您的iOS设备上,在Safari中加载您的网页
  3. 将您的设备直接连接到Mac上
  4. 如果您的Mac尚未激活Safari的开发人员菜单,请转到“首选项”>“高级”,然后选择“在菜单栏中显示开发菜单”
  5. 在您的Mac上,转到“开发”>“[您的iOS设备名称]”>“[您的网页]”

Safari的检查器将显示您的iOS设备的控制台。


3
我们可以查看Safari控制台日志,而不是应用程序的日志。 - Gamma-Point
这在模拟器上是有效的...还没有尝试在实际设备上。 - sketchthat

-1
作为替代方案,您可以使用一个屏幕上的日志记录工具,例如ticker-log,以便在没有(方便的)访问控制台的情况下查看日志。

这是一个基于浏览器的JavaScript解决方案,而OP正在询问本地iOS开发(使用NSLog等)。 - Richard Fairhurst

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接