美文网首页
_WebThreadLock()

_WebThreadLock()

作者: coderPoo | 来源:发表于2018-10-22 11:40 被阅读190次

carshlytics 崩溃日志

这个问题突然出现,特别困惑,公司内部大神咨询了一遍,没找到根本原因。很多猜测异步线程 刷新了webView。

[图片上传中...(image.png-7ec48f-1540179166270-0)]

Crashed: WebThread
0  WebCore                        0x18da9fae8 _WebThreadLock() + 220
1  WebCore                        0x18d58b858 WebRunLoopLock(__CFRunLoopObserver*, unsigned long, void*) + 44
2  CoreFoundation                 0x1853a6910 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
3  CoreFoundation                 0x1853a4238 __CFRunLoopDoObservers + 412
4  CoreFoundation                 0x1853a4768 __CFRunLoopRun + 1152
5  CoreFoundation                 0x1852c4da8 CFRunLoopRunSpecific + 552
6  WebCore                        0x18d5882d4 RunWebThread(void*) + 592
7  libsystem_pthread.dylib        0x185025220 _pthread_body + 272
8  libsystem_pthread.dylib        0x185025110 _pthread_body + 290
9  libsystem_pthread.dylib        0x185023b10 thread_start + 4
image.png

转折点

同事联调web界面的时候,右滑关闭web界面app崩溃,访问的web地址是 微软的 员工邮箱 OutLook,每次侧滑关闭崩溃
image.png
WebCore`_WebThreadLock:
    0x116a512e0 <+0>:   pushq  %rbp
    0x116a512e1 <+1>:   movq   %rsp, %rbp
    0x116a512e4 <+4>:   pushq  %r14
    0x116a512e6 <+6>:   pushq  %rbx
    0x116a512e7 <+7>:   callq  0x117e08f5a               ; symbol stub for: pthread_main_np
    0x116a512ec <+12>:  movl   %eax, %r14d
    0x116a512ef <+15>:  testl  %r14d, %r14d
    0x116a512f2 <+18>:  je     0x116a512fd               ; <+29>
    0x116a512f4 <+20>:  movb   $0x1, 0x174dacd(%rip)     ; WebCore::SVGNames::zoomAndPanAttr + 7
    0x116a512fb <+27>:  jmp    0x116a51329               ; <+73>
    0x116a512fd <+29>:  cmpb   $0x1, 0x1735a6c(%rip)     ; savedAutoreleasePoolMark + 7
    0x116a51304 <+36>:  jne    0x116a513c5               ; <+229>
    0x116a5130a <+42>:  movq   0x1735a67(%rip), %rbx     ; webThread
    0x116a51311 <+49>:  callq  0x117e08f60               ; symbol stub for: pthread_self
    0x116a51316 <+54>:  movq   %rbx, %rdi
    0x116a51319 <+57>:  movq   %rax, %rsi
    0x116a5131c <+60>:  callq  0x117e08f48               ; symbol stub for: pthread_equal
    0x116a51321 <+65>:  testl  %eax, %eax
    0x116a51323 <+67>:  je     0x116a513c5               ; <+229>
    0x116a51329 <+73>:  movl   $0x5c, %edi
    0x116a5132e <+78>:  callq  0x117e08f4e               ; symbol stub for: pthread_getspecific
    0x116a51333 <+83>:  movq   %rax, %rbx
    0x116a51336 <+86>:  testq  %rbx, %rbx
    0x116a51339 <+89>:  je     0x116a5137b               ; <+155>
    0x116a5133b <+91>:  cmpq   0x1735aa6(%rip), %rbx     ; webLock
    0x116a51342 <+98>:  je     0x116a5138c               ; <+172>
    0x116a51344 <+100>: movb   $0x1, %cl
    0x116a51346 <+102>: xorl   %eax, %eax
    0x116a51348 <+104>: lock   
    0x116a51349 <+105>: cmpxchgb %cl, 0x1735aa4(%rip)      ; webLock + 12
    0x116a51350 <+112>: jne    0x116a513b7               ; <+215>
    0x116a51352 <+114>: movq   %rbx, 0x1735a8f(%rip)     ; webLock
    0x116a51359 <+121>: movl   $0x1, %eax
    0x116a5135e <+126>: movl   %eax, 0x1735a8c(%rip)     ; webLock + 8
    0x116a51364 <+132>: testl  %r14d, %r14d
    0x116a51367 <+135>: je     0x116a5139f               ; <+191>
    0x116a51369 <+137>: movb   $0x0, 0x174da58(%rip)     ; WebCore::SVGNames::zoomAndPanAttr + 7
    0x116a51370 <+144>: incl   0x1735a12(%rip)           ; mainThreadLockCount
    0x116a51376 <+150>: popq   %rbx
    0x116a51377 <+151>: popq   %r14
    0x116a51379 <+153>: popq   %rbp
    0x116a5137a <+154>: retq   
    0x116a5137b <+155>: callq  0x117e07a3c               ; symbol stub for: WTF::Thread::initializeCurrentTLS()
    0x116a51380 <+160>: movq   %rax, %rbx
    0x116a51383 <+163>: cmpq   0x1735a5e(%rip), %rbx     ; webLock
    0x116a5138a <+170>: jne    0x116a51344               ; <+100>
    0x116a5138c <+172>: movl   0x1735a5e(%rip), %eax     ; webLock + 8
    0x116a51392 <+178>: incl   %eax
    0x116a51394 <+180>: movl   %eax, 0x1735a56(%rip)     ; webLock + 8
    0x116a5139a <+186>: testl  %r14d, %r14d
    0x116a5139d <+189>: jne    0x116a51369               ; <+137>
    0x116a5139f <+191>: movl   0x17359df(%rip), %eax     ; webThreadLockCount
    0x116a513a5 <+197>: incl   %eax
    0x116a513a7 <+199>: movl   %eax, 0x17359d7(%rip)     ; webThreadLockCount
    0x116a513ad <+205>: cmpl   $0x2, %eax
    0x116a513b0 <+208>: jae    0x116a513e8               ; <+264>
    0x116a513b2 <+210>: popq   %rbx
    0x116a513b3 <+211>: popq   %r14
    0x116a513b5 <+213>: popq   %rbp
    0x116a513b6 <+214>: retq   
    0x116a513b7 <+215>: leaq   0x1735a36(%rip), %rdi     ; webLock + 12
    0x116a513be <+222>: callq  0x117e07922               ; symbol stub for: WTF::Lock::lockSlow()
    0x116a513c3 <+227>: jmp    0x116a51352               ; <+114>
    0x116a513c5 <+229>: callq  0x116a52660               ; CurrentThreadContext()
    0x116a513ca <+234>: movq   %rax, %rcx
    0x116a513cd <+237>: leaq   0x170b23c(%rip), %rdi     ; @"%s, %p: Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now..."
    0x116a513d4 <+244>: leaq   0x13f80da(%rip), %rsi     ; "void _WebThreadLock()"
    0x116a513db <+251>: xorl   %eax, %eax
    0x116a513dd <+253>: movq   %rcx, %rdx
    0x116a513e0 <+256>: callq  0x117e06c7a               ; symbol stub for: NSLog
    0x116a513e5 <+261>: int3   
    0x116a513e6 <+262>: ud2    
    0x116a513e8 <+264>: callq  0x116a52660               ; CurrentThreadContext()
    0x116a513ed <+269>: movq   %rax, %rcx
    0x116a513f0 <+272>: leaq   0x170b239(%rip), %rdi     ; <@"%s, %p: Multiple locks on web thread not allowed! Please file a bug. Crashing now..."
    0x116a513f7 <+279>: leaq   0x13f80b7(%rip), %rsi     ; "void _WebThreadLock()">
    0x116a513fe <+286>: xorl   %eax, %eax
    0x116a51400 <+288>: movq   %rcx, %rdx
    0x116a51403 <+291>: callq  0x117e06c7a               ; symbol stub for: NSLog
    0x116a51408 <+296>: int3   
->  0x116a51409 <+297>: ud2    
    0x116a5140b <+299>: nopl   (%rax,%rax)
image.png

猜测

xcode日志 只有_WebThreadLock 没有具体的错误原因,也没有定位到崩溃代码位置。crashlytics上有一下runloop相关信息
1  WebCore                        0x18d58b858 WebRunLoopLock(__CFRunLoopObserver*, unsigned long, void*) + 44

所以我猜测是不是项目中使用runloop出现了问题。全局查找,注册了所有的runloop,然后在测试 右滑关闭outlook界面,崩溃不出现了。注册代码

   _timerLoop = [NSTimer timerWithTimeInterval:_durationTime target:self selector:@selector(timerScrollImage) userInfo:nil repeats:YES];
   [[NSRunLoop currentRunLoop] addTimer:_timerLoop forMode:NSDefaultRunLoopMode];
 //注册一下代码
 //  [[NSRunLoop currentRunLoop] runMode:UITrackingRunLoopMode beforeDate:[NSDate date]];
原来还是 以前同事留下的bug。 UITrackingRunLoopMode
代码优化 修改bug,完毕!观测了半个月的bug打死都没想到是因为使用runloop的原因,一直以为是webview底层有bug!

相关文章

  • _WebThreadLock()

    carshlytics 崩溃日志 这个问题突然出现,特别困惑,公司内部大神咨询了一遍,没找到根本原因。很多猜测异步...

网友评论

      本文标题:_WebThreadLock()

      本文链接:https://www.haomeiwen.com/subject/zziwzftx.html