最近在看crash,发现xlog有不少crash。用的xlog应该是17年的版本,比较老。现在发现一些crash 主要集中在LogBuffer的Flush和Write方法
- memset crash
这个crash 有好几种
第一种: 这个和你们 #576 问题应该是一样的。 准备按你们的修改方法改为Length,但是不明白为什么会有问题?按说MaxLength就是mmap的大小啊?
signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr e63f0000
#00 pc 0x178f0 libc.so (memset+48)
#01 pc 0x97f3 libmarsxlog.so (_ZN9LogBuffer7__ClearEv+22)
#02 pc 0x97cb libmarsxlog.so (_ZN9LogBuffer5FlushER10AutoBuffer+94)
第二种: 堆栈基本一样,虽然也是memset出错,但是报的是signal7。我有看你们signal7的bug,说是把mmap放在内部存储,我们确实是放在内部存储的。 这个崩溃次数占比非常高,设备台数到不是特别高,所以应该是一些机型上有这个问题。
signal 7 (SIGBUS), code 2 (BUS_ADRERR), fault addr 00000070ee7c8000
#00 pc 0x1b1e8 libc.so (memset+360)
#01 pc 0xeac8 libmarsxlog.so (_ZN9LogBuffer5FlushER10AutoBuffer+180)
#02 pc 0x9944 libmarsxlog.so (_Z13appender_open13TAppenderModePKcS1_S1_S1_+712)
#03 pc 0xab24 libmarsxlog.so (_Z24appender_open_with_cache13TAppenderModeRKNSt6__ndk112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEES8_PKcSA_SA_+932)
第三种: 这个应该是在程序退出时, 这个好像在64位上比较多。也是在memset,看了下代码是在memset(sg_mmmap_file.data(), 0, kBufferBlockLength);
这个是不是和第一种类似问题? kBufferBlockLength就是MaxLength。
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 006573677362696c
#00 pc 0x1b0ec libc.so (memset+236)
#01 pc 0xa68c libmarsxlog.so (_Z14appender_closev+312)
#02 pc 0x76e28 libc.so (__cxa_finalize+192)
#03 pc 0x19dd8 libc.so (exit+24)
#04 pc 0xcd670 libandroid_runtime.so
#05 pc 0xce630 libandroid_runtime.so
- 写log时 deflate 报错
signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 00000076efae8ffa
#00 pc 0xfe34 libz.so
#01 pc 0xeeb8 libz.so (_tr_flush_block+264)
#02 pc 0x72bc libz.so
#03 pc 0x55f4 libz.so (deflate+4704)
#04 pc 0xebf8 libmarsxlog.so (_ZN9LogBuffer5WriteEPKvm+188)
#05 pc 0x8ce4 libmarsxlog.so
- 空指针
LogBuffer. Fix方法空指针
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000000000000000
#00 pc 0x1d4fc libmarsxlog.so
#01 pc 0x1cacc libmarsxlog.so
#02 pc 0x1f0f8 libmarsxlog.so
#03 pc 0x1c398 libmarsxlog.so
#04 pc 0x16a34 libmarsxlog.so
#05 pc 0x1a554 libmarsxlog.so
#06 pc 0xe9a0 libmarsxlog.so (_ZN9LogBuffer5__FixEv+132)
#07 pc 0xe8e4 libmarsxlog.so (_ZN9LogBufferC1EPvmbPKc+68)
#08 pc 0x98d8 libmarsxlog.so (_Z13appender_open13TAppenderModePKcS1_S1_S1_+604)
#09 pc 0xab24 libmarsxlog.so (_Z24appender_open_with_cache13TAppenderModeRKNSt6__ndk112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEES8_PKcSA_SA_+932)
1条答案
按热度按时间lztngnrs1#
你可以去扒微信的xlog来用, 那个版本比较稳