Xcode 8 或 9 开始显示运行时问题。您会在窗口顶部看到一个紫色图标,并在问题导航器中看到一个列表,旁边是编译警告和错误等构建时问题。
我见过的运行时问题是由系统库造成的。我自己的应用程序代码有办法生成这些吗?
最佳答案
<罢工>是的!如果您执行某些被清理程序捕获的操作,例如在启用了线程清理程序的后台线程中执行某些 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/