是的!如果您执行消毒程序捕获的操作(例如启用了 Thread Sanitizer 的后台线程执行某些 UI 操作),您就会看到这些内容。布局不明确并在视图调试器中暂停也是导致这种情况发生的一种方法。不管怎样,在苹果的库中看到这种情况发生并不是一件好事\xe2\x80\xa6
更新:我研究了这些警告是如何被击中的,LLDB 本质上是在 Sanitizer 动态库内的一组魔术函数(、、、、)上设置了一个断点,这些函数在问题发生时被__asan::AsanDie()
调用__tsan_on_report
。如果您定义这些函数的您自己的版本并调用它们,您将收到显示的警告。首先,在项目中的某个位置创建符号:__ubsan_on_report
__main_thread_checker_on_report
void __main_thread_checker_on_report(char *message) {\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n然后您可以随意触发它,只需将此代码放在应用程序中的任何位置即可(您可能希望将其隐藏在宏后面):
\n\n((void (*)(char *))dlsym(dlopen(NULL, RTLD_LAZY), "__main_thread_checker_on_report")))("This will show up as a warning")\n
Run Code Online (Sandbox Code Playgroud)\n\n不用说,如果您选择使用它,这几乎肯定不会与实际的消毒剂很好地配合。您可能应该根据您是否使用消毒剂有条件地编译上述内容。
\n