ios - 如何记录在 Xcode 中显示为运行时问题的警告?

标签 ios xcode ios11 xcode9

Xcode 8 或 9 开始显示运行时问题。您会在窗口顶部看到一个紫色图标,并在问题导航器中看到一个列表,旁边是编译警告和错误等构建时问题。

enter image description here

enter image description here

我见过的运行时问题是由系统库造成的。我自己的应用程序代码有办法生成这些吗?

最佳答案

<罢工>是的!如果您执行某些被清理程序捕获的操作,例如在启用了线程清理程序的后台线程中执行某些 UI 操作,您将看到这些。在 View 调试器中使用不明确的布局和暂停也是导致这种情况发生的一种方式。无论哪种方式,在 Apple 的库中看到这种情况都不是一件好事……

更新:我研究了这些警告是如何被触发的,LLDB 本质上是在一组魔术函数上设置断点(__asan::AsanDie()__tsan_on_report__ubsan_on_report__main_thread_checker_on_report)在发生问题时调用的 sanitizer 动态库内部。如果您定义自己的这些函数版本并调用它们,您将收到警告。首先,在项目的某处创建符号:

void __main_thread_checker_on_report(char *message) {
}

然后您可以随意触发它,只需将此代码放在应用程序的任何位置(您可能想将其隐藏在宏后面):

((void (*)(char *))dlsym(dlopen(NULL, RTLD_LAZY), "__main_thread_checker_on_report")))("This will show up as a warning")

不用说,如果您选择使用它,这几乎肯定不会与实际的 sanitizer 一起使用。您可能应该根据是否使用 sanitizer 有条件地编译上述内容。

关于ios - 如何记录在 Xcode 中显示为运行时问题的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46372548/

相关文章:

ios - 添加应用组后 Xcode 显示警告(将 "App Groups"授权添加到您的应用 ID)

ios - Xcode 9 - 关于 Info.plist 中位置使用说明的警告 - iOS 11

c++ - OpenGL 代码适用于 Windows 但不适用于 Mac

iOS 11 文件提供程序 - 永远不会枚举工作集

ios11 - UIDocumentInteractionController iOS11 beta 4 的问题

ios - iOS上的正弦波绘图

ios - 如何在 Swift 中从其 ViewController 获取 UIView 子类实例

ios - XMPPFramework - 从 Openfire 服务器检索存档消息

xcode - Xcode 看似过于复杂的控制/输出工作流程有什么好处?

ios - 使用 Bool 通过 SwiftUI 动态过滤 @FetchRequest - 显示 true、false 或两者