调测索喜应用收到 SIGSEGV 信号

同样的程序,已收到两份异常报告,还在定位问题;

1.第一种情况:PC指向静态库中函数的一个地址

[E][01-01 00:00:21808][sc2000_app][ac_sigsegv_handler :81] Signal = 11  Memory location = (nil)
R0 = 0000000000000000  R1 = 000000005E801070  R2 = 0000000000000001
R3 = 0000000000000000  R4 = 000000005E801208  R5 = 000000005E801070
R6 = 000000005E801070  R7 = 000000005D7FDC30
R8 = 000000005E801070  R9 = 000000005E801070  R10 = 0000000000000040
FP = 0000000000000000  IP = 00000000004A1594  SP = 000000005D7FDBA8
LR = 00000000003A95E5  PC = 00000000003A828A
// evbuffer_expand_singlechain     evbuffer_chain_insert


[E][01-01 00:00:21809][sc2000_app][ac_sigsegv_handler :86] backtrace() returned 2 addresses
[E][01-01 00:00:21810][sc2000_app][ac_sigsegv_handler :100] 0: /mnt/mtd/sc2000_app() [0x15da06]

[E][01-01 00:00:21810][sc2000_app][ac_sigsegv_handler :100] 1: /lib/libc.so.6(+0x25030) [0x76c40030]

[E][01-01 00:00:21810][sc2000_app][ac_sigsegv_handler :106] Program exits
root@xag:/tmp/pokyLog# cat /mnt/mtd/SIGSEGV.txt
sig : Memory location : lr : pc --> 11:0:3839461:3834506
/mnt/mtd/sc2000_app() [0x15da06]
/lib/libc.so.6(+0x25030) [0x76c40030]

2.第二种情况:PC指向一个堆栈地址
[E][05-14 09:10:18613][sc2000_app][ac_sigsegv_handler :206] backtrace() returned 2 addresses
[E][05-14 09:10:18614][sc2000_app][ac_sigsegv_handler :217] 0: /mnt/mtd/sc2000_app() [0x15f880]

[E][05-14 09:10:18615][sc2000_app][ac_sigsegv_handler :217] 1: /lib/libc.so.6(+0x25030) [0x76c40030]

[E][05-14 09:10:18615][sc2000_app][ac_sigsegv_handler :201] Signal = 11  Memory location = 0x5e800a50
R0 = 0000000000001041  R1 = 0000000000000070  R2 = 0000000000000070
R3 = 0000000000001041  R4 = 0000000000000000  R5 = 00000000FFFFFFEC
R6 = 0000000076C694DB  R7 = 0000000000000019
R8 = 0000000000000000  R9 = 000000005EB0DB80  R10 = 0000000000000000
FP = 00000000FFFFFFEC  IP = 0000000000000021  SP = 000000005EB0DB20
LR = 000000000010327B  PC = 000000005E800A50

segment fault 常见触发源

内核会依据下列条件来判断是否发生了用户态段错误,并上报SIGSEGV信息给用户态task:

    用户态数据段的地址越界
    用户态代码段的指令读取异常
    访问操作与所访问的内存页面权限不匹配
    非对齐访问

导致段错误的常见编程范式有:

    使用未初始化变量
    使用已释放的内存
    数组越界
    多进程下使用不可重入函数
    内存溢出

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值