墓碑.log中上报的SIGSEGV
没有"故障地址",可能是什么原因?
这是墓碑所报告的内容(错误地址是--------),
signal 11 (SIGSEGV), code 0 (SI_USER from pid 4956, uid 0), fault addr --------
rax fffffffffffffffc rbx 000075d08fa0d2e0 rcx 000075d0901f98ca rdx 0000000000000010
r8 0000000000000000 r9 0000000000000008 r10 00000000ffffffff r11 0000000000000246
r12 00000000ffffffff r13 000075d08fa23000 r14 000075d08fa230a8 r15 7fffffffffffffff
rdi 0000000000000005 rsi 00007ffd21eddb90
rbp 00000000ffffffff rsp 00007ffd21eddb38 rip 000075d0901f98ca
和回溯似乎是合理的(不是堆栈损坏)。
backtrace:
#00 pc 00000000000ea8ca /apex/com.android.runtime/lib64/bionic/libc.so (__epoll_pwait+10)
#01 pc 0000000000040bf0 /system/bin/wificond (android::Looper::pollInner(int)+160)
#02 pc 0000000000040aee /system/bin/wificond (android::Looper::pollOnce(int, int*, int*, void**)+126)
#03 pc 000000000003fdd4 /system/bin/wificond (android::wificond::LooperBackedEventLoop::Poll()+36)
#04 pc 000000000001feaf /system/bin/wificond (main+959)
#05 pc 000000000008e4f5 /apex/com.android.runtime/lib64/bionic/libc.so (__libc_init+101)
当接收到的siginfo_t
中的si_code
为SI_USER
、SI_QUEUE
或SI_TKILL
(参见AOSP源码中的[signal_has_si_addr()])时,tombstone(以前的debugd)工具将故障地址设置为-------
si_code
,根据[man sigaction(2)]。指示发送此信号的原因;在下面的例子中,si_code是SI_USER
,这意味着信号来自另一个用户进程(例如kill
)。
signal 11 (SIGSEGV), code 0 (SI_USER from pid 4956, uid 0), fault addr --------