Xcode 11.2.1线程清理程序abort_with_payload

时间:2019-12-02 15:46:37

标签: ios xcode thread-sanitizer

我正在尝试在Xcode 11.2.1中使用Thread Sanitizer,但是每当应用程序启动时(只是从Xcode的模板开始的单个视图应用程序,什么都没有添加),它都会遇到__abort_with_payload:

libsystem_kernel.dylib`__abort_with_payload:
     0x7fff51b73be0 <+0>:  movl   $0x2000209, %eax          ; imm = 0x2000209 
     0x7fff51b73be5 <+5>:  movq   %rcx, %r10
     0x7fff51b73be8 <+8>:  syscall 
 ->  0x7fff51b73bea <+10>: jae    0x7fff51b73bf4            ; <+20>
     0x7fff51b73bec <+12>: movq   %rax, %rdi
     0x7fff51b73bef <+15>: jmp    0x7fff51b54a89            ; cerror_nocancel
     0x7fff51b73bf4 <+20>: retq   
     0x7fff51b73bf5 <+21>: nop    
     0x7fff51b73bf6 <+22>: nop    
     0x7fff51b73bf7 <+23>: nop

Apple的任何文档或其他人使用Thread Sanitizer的指南都说,除了在方案的设置中打勾,您还需要做其他事情,但是对我来说这是行不通的:(

打印$ arg5给出

  

pthread_t已损坏

听起来不太好!

这是在使用iPhone 11 Pro Max模拟器的Catalina 10.15.2上

3 个答案:

答案 0 :(得分:5)

感谢vandzi指出,此问题自Xcode 11.3.1起已得到修复!

答案 1 :(得分:1)

我也遇到类似的问题,方案设置中的Thread SanitizerON,将其关闭可以解决我的情况。

答案 2 :(得分:0)

看起来像已经连接到这个tsan commit https://github.com/llvm/llvm-project/commit/f9a706a36ae5dcb87b0b6649d0c80e989400f48e

https://reviews.llvm.org/D71559

我需要非常糟糕地运行线程清理程序,所以 用

构建了最新的llvm
pack()

并替换了

> mkdir workspace/
> git clone https://github.com/llvm/llvm-project.git
> cd llvm-project; mkdir build; cd build 

>cmake -G Ninja ../llvm -DLLVM_ENABLE_PROJECTS='clang;clang-tools-extra;libcxx;libcxxabi;libunwind;lldb;compiler-rt;lld;polly' -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=$HOME/llvm -DLLVM_ENABLE_DUMP=ON # not everything is needed though here

>ninja

使用来自的新构建的库

~/Library/Developer/CoreSimulator/Devices/C0E36E0C-C22A-426E-80B7-557164B2FBD3/data/Containers/Bundle/Application/D6D4D9DB-4C26-4FA0-8363-5CA03A47B6C0/Spotify.app/Frameworks/libclang_rt.tsan_iossim_dynamic.dylib

该应用似乎已加载到模拟器中,并且不会因

崩溃
/workspace/llvm-project/build/lib/clang/10.0.0/lib/darwin/libclang_rt.tsan_iossim_dynamic.dylib # 10.0.0 is the previos version some artifact of my bulding, it had the fixed revision ^

还有!我的应用似乎显示了第一个屏幕,但随后却冻结了,因此不确定其是否完全可以使用。

希望有帮助