暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

addr2line解析openGauss日志

openGauss 2024-11-14
236

使用方法

我们经常可以在openGauss的日志中看到类似如下的错误:

    2024-10-09 09:31:35.807 6705270c.6535 [unknown] 281439526236064 dn_6002 0 dn_6001_6002_6003 42809  0 [BACKEND] BACKTRACELOG:  tid[1289346]'s backtrace:
    /usr1/hmm/openGauss/cluster/gauss/app/bin/gaussdb(+0xd8e2e8) [0xaaad448de2e8]
    /usr1/hmm/openGauss/cluster/gauss/app/bin/gaussdb(_Z9errfinishiz+0x4a4) [0xaaad448d1214]
    /usr1/hmm/openGauss/cluster/gauss/app/bin/gaussdb(_Z17UpdateControlFilev+0x454) [0xaaad4526f174]
    /usr1/hmm/openGauss/cluster/gauss/app/bin/gaussdb(_Z16CreateCheckPointi+0x118c) [0xaaad4528df30]
    /usr1/hmm/openGauss/cluster/gauss/app/bin/gaussdb(_Z12ShutdownXLOGim+0x174) [0xaaad4528ef54]
    /usr1/hmm/openGauss/cluster/gauss/app/bin/gaussdb(_Z16CheckpointerMainv+0x7c0) [0xaaad44e2cff0]
    /usr1/hmm/openGauss/cluster/gauss/app/bin/gaussdb(_Z17GaussDbThreadMainIL15knl_thread_role38EEiP14knl_thread_arg+0x3ec) [0xaaad44e15aac]
    /usr1/hmm/openGauss/cluster/gauss/app/bin/gaussdb(+0x129e850) [0xaaad44dee850]
    /lib64/libpthread.so.0(+0x88cc) [0xfffe92e888cc]
    /lib64/libc.so.6(+0xd954c) [0xfffe92dc954c]
            Use addr2line to get pretty function name and line

    首先我们利用c++filt解析函数的原始签名,包括函数名、参数类型和返回类型等信息。
    例如我们想分析下面这个函数:

      [czk@openGauss135]$ echo "_Z17UpdateControlFilev+0x454" | c++filt
      UpdateControlFile()+0x454 // 函数名+偏移量

      再使用nm命令获取函数在可执行文件中的地址。

        [czk@openGauss135]$ which gaussdb
        /usr1/hmm/openGauss/cluster/gauss/app/bin/gaussdb
        [czk@openGauss135]$ nm -C /usr1/hmm/openGauss/cluster/gauss/app/bin/gaussdb | grep UpdateControlFile
        0000000001fffd5c T UpdateControlFile()

        我们可以使用addr2line命令来解析出错的函数和行号。

          [czk@openGauss135]$ addr2line -e /usr1/hmm/openGauss/cluster/gauss/app/bin/gaussdb 0x1fffd5c
          /usr1/hmm/openGauss-server/src/gausskernel/storage/access/transam/xlog.cpp:6423

          这将给出UpdateControlFile的起始行号,我们也可以通过日志里记录的函数偏移来计算具体的行号。

            [czk@openGauss135]$ addr2line -e /usr1/hmm/openGauss/cluster/gauss/app/bin/gaussdb 0x20001b0  // 0x1fffd5c + 0x454
            /usr1/hmm/openGauss-server/src/gausskernel/storage/access/transam/xlog.cpp:6458 (discriminator 5)

            这样我们就可以轻松定位到出错的代码具体在哪了。

            点击阅读原文跳转作者文章

            文章转载自openGauss,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论