2017-09-22 65 views
19

Xcode 8或9开始显示运行时问题。您会在窗口顶部看到一个紫色图标,并在Issue Navigator中看到一个列表,旁边有编译警告和错误等编译时问题。如何记录在Xcode中显示为运行时问题的警告?

enter image description here

enter image description here

我见过的运行问题是由系统库中创建。有没有办法让我自己的应用程序代码生成这些?

+0

我认为你不能到目前为止 –

+4

准确地得到你所要求的是不可能的,但是如果你详细说明了你试图达到的目标或者你试图解决的问题,我们可能能够提供替代解决方案。 –

回答

1

是的!你会看到这些,如果你做了一些清理工具捕获的东西,比如在启用Thread Sanitizer的情况下执行某些UI操作的后台线程。在视图调试器中有一个模糊的布局和暂停也是发生这种情况的一种方法。无论哪种方式,看到了这个发生在苹果的图书馆是不是一件好事?

+6

我认为,问题的关键在于能够随意“手动”生成自定义运行时问题。 – FreeNickname

+0

你可以随意创建吗?是的,如果你做了上面列出的任何事情。你可以做它作为一种记录或调试设施?不,不是。这不是它应该用来做什么的。 –

+0

嗯,在我看来它实际上就是它应该用于的东西:)不是用于一般日志记录,而是用于快速解决未解决的运行时问题,能够查看其他元数据并快速跳转到代码中的位置造成它。这将是非常棒的。基于对这个问题的兴趣,看起来很多人都认同。但是,很可能这是不可能的。如果有人出现并告诉我们它确实是这样,那将会很酷。 – FreeNickname

1

CocoaLumberjack框架可以用来捕捉运行时间控制台日志以及应用程序的背景唤醒日志。

https://github.com/CocoaLumberjack/CocoaLumberjack

https://github.com/phonegap/phonegap-plugin-push/issues/1988

这样你可以捕捉文件一样显示在下面Xcode9紫色警告,保持应用程序容器内: -

========= ================================================== ======

主线程检查器:在后台线程上调用的UI API: - [UIApplication registerUserNotificationSettings:] PID:2 897,TID:1262426,主题名称:(无),队列名称:com.apple.root.default的QoS服务质量:21

1

here
一旦你已经部署了你的应用程序,无论是通过App Store或Ad Hoc或Enterprise构建,您将无法将Xcode的调试器附加到它。要调试问题,您需要分析设备的崩溃日志和控制台输出。

Apple Watch崩溃日志将在配对的设备上可用,也可以使用下面描述的方法获取。

有关编写富文本的更多信息NSLog报表,请参阅Improved logging in Objective-C

粘贴下面的示例代码到您的项目:

NSMutableArray *someObject = [NSMutableArray array]; 
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject); 
[someObject addObject:@"foo"]; 
NSLog(@"%s:%d someObject=%@", __func__, __LINE__, someObject); 
1

这取决于你,如果你正在做的其他然后主线程任何UI相关的东西,所以系统会为您生成否则你不能手动生成它。

所有UI操作都应该在主线程中完成。

如果你不这样做,在XCode 9有功能称为主线程检查器

欲了解更多信息,可以访问以下网址:https://developer.apple.com/documentation/code_diagnostics/main_thread_checker

它基本上是用来检查任何UIKit相关的东西是否正在发生在主线程与否,如果没有这样做,这会产生问题?在运行时。因此,像下面一样将代码包装在主线程块中以避免毛刺和运行时警告。

您可以启用 - 禁用使用此步骤编辑计划... - >(选择方案) - >诊断 - >禁用“主线程检查器”

1

的XCode 8.3和更早版本可以使用SET像下面的setNeedsDisplay()这样的UIKit类的任何方法的断点。

此外,在使用#import <objc/runtime.h>的objective-csteipete类中还有一个库。

enter image description here

的Xcode 9下面库Xcode.app/Contenets/Developer/usr/lib/libMainThreadChecker.dylib是可用的,在运行时可能进行外的主线程的任何相关问题,该手柄。