原理我不知道,我就佩服那个能发现这个bug的人
看别人说的,只要把那段信息给覆盖掉就好了,就是让好多发其它消息,把那个消息顶掉,或者,直接删好友,然后消息就被清空了。最近微信似乎
最近微信似乎出现了一个Bug,比如发一个“15。。。。。。。。。。。。。。。”(不带引号)的符号,就会让对方的手机卡死。
如果只是朋友之间互开玩笑,那倒也没什么关系,要是抱着好玩的态度,发到同事的微信群里,给人家造成了困扰,岂不是开了玩笑不成反被责怪?
据一位Android应用开发者说,这个问题的出现,是java.util.regex.Matcher.findNextImpl(Native method)模块的锅,开发人员似乎是忽视了正则匹配的问题,把匹配操作放在UI主线程里了,处理超时导致ANR。
原来,类似的问题,在QQ上也曾经出现过,据说当时在手机QQ上,发类似Y.oo.O.oo.z.oo.yY.oo.0.oo.z.oo.0.oo.0.oo.y.oo.z.oo.Z.oo.Z.oo.Y.oo.O.oo.Y.oo.Y.oo.Z.oo.y.oo.O.oo.o.oo.Y.oo.z.oo.y.oo.Y.oo.y.oo.y.oo.Y.oo.o.oo.0.oo.Z.oo.O.oo.o.oo.Y.oo.0.oo.0.oo.y.oo.O.oo.0.oo.Z.oo.z.oo.Y.oo.Y.oo.y.oo.Y.oo.Y.oo.z.oo.Y.oo.Y.oo.的消息,就会让手机QQ突然崩溃,也是因为正则匹配的问题,造成的主线程/UI线程发生阻塞。
由此推断,上述两个让微信/QQ突然卡死的原因,可能与长消息解析、正则匹配中的问题有关。
这从一定程度上说明了为什么类似的字符(如:OO00.oo、。。。。。。。。。。)也会产生同样的效果,以及为什么这类字符长度达到一定数量才会产生效果。
以下是调试错误的代码,想深入了解的,可以好好参考一下:
09-25 14:41:23.755 597-1157/? I/logserver: ANR, proc_name:com.tencent.mm, f1_name: at java.util.regex.Matcher.findNextImpl(Native method), topcpu_proc:com.tencent.mm 09-25 14:41:23.755 597-1157/? I/logserver: ANR, total_cpu_rate:2800, iowait_cpu_rate:40, app_version:unknown
main\" prio=5 tid=1 Runnable | group=\"main\" sCount=0 dsCount=0 obj=0x77106578 self=0xee984f00 | sysTid=19995 nice=0 cgrp=default sched=0/0 handle=0xf173e534 | state=R schedstat=( 12367079176 38333854 4748 ) utm=1177 stm=59 core=5 HZ=100 | stack=0xff13c000-0xff13e000 stackSize=8MB | held mutexes= \"mutator lock\"(shared held) at java.util.regex.Matcher.findNextImpl(Native method) at java.util.regex.Matcher.find(Matcher.java:437) - locked <0x0c241390> (a java.util.regex.Matcher) at com.tencent.mm.ui.widget.celltextview.g.a.o(SourceFile:96) at com.tencent.mm.ui.widget.celltextview.g.a.dc(SourceFile:55) at com.tencent.mm.ui.widget.celltextview.f.b.a(SourceFile:76) at com.tencent.mm.ui.widget.celltextview.d.a.Cw(SourceFile:467) at com.tencent.mm.ui.widget.celltextview.d.a.Cp(SourceFile:92)