_WebThreadLock()

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!
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,980评论 3 119
  • Mr_Oldman阅读 108评论 0 0
  • 引:树欲静而风不止,子欲养而亲不在,人世间的悲伤莫过于此,故作长恨诗。 ...
    赛腾烟阅读 1,307评论 3 14
  • 早上洗脸吃饭都是挂着泪完成的,路上的时候也是不停的默默落泪。 走着走着忽然非要抱抱,我一看,早已经哭花了脸,鼻子一...
    独步七月阅读 165评论 0 1
  • 面对有限的时间。资源和战略目标,砍需求和功能显得尤为关键,如何抉择留下需要的功能,而这些功能虽然单薄但确实用户最急...
    lj神经刀阅读 196评论 0 1