elog堆栈信息使用方法¶
根据得到的elog文件信息中的 ERROR STACK 和 OSCAR 可执行文件,可以通过 addr2line 命令将十六进制形式记录的栈帧地址转换为可读的文件名、行号以及函数名。方便分析问题。
建议使用命令格式¶
addr2line -f -e oscar文件路径 stack地址
addr2line 可用参数¶
-a: 在函数名、文件名和行号信息之前,以十六进制形式显示地址。
-e <executable>: 指定需要转换地址的可执行文件名 executable ,默认文件是 a.out 。
-i: 如果需要转换的地址是一个内联函数,则还将以 {FUNCTIONNAME} FILENAME:LINENO 的格式打印返回第一个非内联函数的信息。
-p: 每个地址的信息都打印在一行上。
-s: 去除目录名。
-f: 显示函数名。
-h|--help: 打印帮助信息。
注解
文件必须是 elog 对应当前所用的 OSCAR 可执行文件,位于 安装目录/oscar/bin/ 下。
addr2line 是 LINUX 自带的命令,支持上述说明中的所有参数使用。 Windows 没有自带 addr2line ,在 oscar/tools/addr2line 中有相应的 exe 文件,但需要先配置环境变量 PATH 才可使用。
-i参数只能在release版本下才能显示内联函数信息。
示例1¶
可执行文件为 oscar,显示函数名并以十六进制显示地址,将每个地址信息打印在一行上。
$ addr2line -f -e /opt/ShenTong/oscar/bin/oscar 0xd606b4 0xd613b6 0x1061b71 0x1071c3c 0x107abfd 0x107484d 0x104ebcd 0x104ec63 0x4cf680 -p -a
0x0000000000d606b4: ElogObjNotExistForIfExists at /root/oscar/oscar/src/ddl/utility.c:193 (discriminator 3)
0x0000000000d613b6: ObjectExist at /root/oscar/oscar/src/ddl/utility.c:489
0x0000000001061b71: ProcessUtility at /root/oscar/oscar/src/tcop/utility.c:1851
0x0000000001071c3c: sys_exec_query_string at /root/oscar/oscar/src/tcop/oscar.c:2391 (discriminator 5)
0x000000000107abfd: ExecCommandExecute at /root/oscar/oscar/src/tcop/oscar.c:5771
0x000000000107484d: OscarMain at /root/oscar/oscar/src/tcop/oscar.c:3490
0x000000000104ebcd: DoBackend at /root/oscar/oscar/src/tcop/oscarmaster.c:1396
0x000000000104ec63: BackendStartupThread at /root/oscar/oscar/src/tcop/oscarmaster.c:1417
0x00000000004cf680: os_thread_main at /root/oscar/oscar/src/os/os0thread.c:2859