根据信号推测coredump可能出现的原因

signal 11: sigsegv

产生原理: 试图访问未分配给自己的内存或者试图往没有写权限的内存地址写数据

可能原因:

资源泄露导致复位

访问非法内存

signal 6: sigabrt

产生原理: 调用abort函数生成coredump

可能原因:

线程死锁,导致自愈复位

glibc中检测到异常,当前栈中raise-abort-int_malloc-

未处理的抛出来的异常,可以根据线程id在日志中判断当前线程可能的业务操作抛出来的异常未处理

其他主动调用abort或者其他线程发送

signal 7: sigbus

产生原理: 非法地址,包括内存地址对齐allignment出错,比如访问一个四字节长的整数,但其地址不是4的倍数。他与sigsegv的区别在于后者是由于对合法存储地址的非法访问触发的(如访问了不属于自己的地址空间或者只读空间)

可能原因:

进程运行中被替换了使用的bin或者so

内存地址不对齐,可能是踩内存导致,通过反汇编当前栈顶函数,查看当时是否在在地址访问内存,且从寄存器看访问内存的值

非法访问内存地址(合法的地址)

signal4 sigill

信号产生原理: 执行了非法指令,通常因为可执行文件本身出现错误,或者试图执行数据段,堆栈溢出时也有可能出现这个信号

可能原因:

文件本身有问题,导致指令错误

不支持的指令

eip指向了非代码段

signal8 sigpfe

产生原理: 在发生致命的算求运算错误时发生,不仅包括浮点数运算错误,还包括除数为0等

可能原因:

浮点运算错误

运算溢出

除数为0

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注