• dmesg和addr2line命令定位段错误


    $ dmesg -T  |grep brpc
    [Thu Nov 25 14:39:53 2021] brpc[3714121]: segfault at 8 ip 0000000002497383 sp 00007ff8bb1fead0 error 6 in brpc[400000+37a2000]
    [Thu Nov 25 14:40:43 2021] brpc[3740592]: segfault at 8 ip 0000000002497383 sp 00007fc2eb9fead0 error 6 in brpc[400000+37a2000]
    
    $ addr2line -e ./brpc  0000000002497383 -f
    _ZN5butil8LinkNodeIN4bvar6detail13AgentCombinerImmNS2_5AddToImEEE5AgentEE12InsertBeforeEPS8_
    /proc/self/cwd/external/com_github_brpc_brpc/src/butil/containers/linked_list.h:97
    
    $ c++filt _ZN5butil8LinkNodeIN4bvar6detail13AgentCombinerImmNS2_5AddToImEEE5AgentEE12InsertBeforeEPS8_
    butil::LinkNode<bvar::detail::AgentCombiner<unsigned long, unsigned long, bvar::detail::AddTo<unsigned long> >::Agent>::InsertBefore(butil::LinkNode<bvar::detail::AgentCombiner<unsigned long, unsigned long, bvar::detail::AddTo<unsigned long> >::Agent>*)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    一、dmesg命令

    dmesg命令,用于获取程序出错时的堆栈地址,用grep过滤出发生崩溃的程序,以及对应的堆栈信息

    [Thu Nov 25 14:39:53 2021] brpc[3714121]: segfault at 8 ip 0000000002497383 sp 00007ff8bb1fead0 error 6 in brpc[400000+37a2000]

    字段说明:
    a) ip: 指令指针寄存器,字段后面的数字就是程序出错时程序执行的位置
    b) sp: 堆栈指针寄存器
    c) error:错误码,由三个字位组成的,从高到底分别为bit2 bit1和bit0
    bit2: 值为1表示是用户态程序内存访问越界,值为0表示是内核态程序内存访问越界
    bit1: 值为1表示是写操作导致内存访问越界,值为0表示是读操作导致内存访问越界
    bit0: 值为1表示没有足够的权限访问非法地址的内容,值为0表示访问的非法地址根本没有对应的页面,也就是无效地址

    二、addr2line命令

    将dmesg获取到的地址转换为代码中发成错误的文件、行号及函数名

    addr2line -e 进程名 ip指令地址 -f
    
    • 1

    三、c++filt命令

    源码文件中的变量名和函数名被修饰后,通过 c++filt 命令可以还原回来

  • 相关阅读:
    【数据结构与算法】时空复杂度的计算
    JS获取项目Url请求头Path--js中${path}
    大数据(二)大数据架构发展史
    【Vue2深度学习】虚拟DOM篇-Vue中的虚拟DOM
    Spring体系结构
    ArcGIS pro 支持 发布三维服务
    npm包停止了对 require 导入方式的支持,只允许使用import 导入方式,怎么解决
    VSCode常用插件
    electron:2.通过COS上传视频video
    数字电路和模拟电路-6组合逻辑模块及其应用(上)
  • 原文地址:https://blog.csdn.net/chen134225/article/details/125568879