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

gbase中宕机问题堆栈及对应代码的关联定位

原创 nanfeng 2022-09-30
320

addr2line工具是一个可以将指令的地址和可执行映像转换为文件名、函数名和源代码行数的工具。

用法

addr2line [-a| --addresses ] [-b bfdname | --target=bfdname] [-C | --demangle[=style]] [-e filename | --exe=filename] [-f | --function] [-s | --basename] [-i | --inlines] [-p | --pretty-print] [-j | --section=name] [-H | --help] [-V | --version] [addr addr ...]


参数

-a --addresses:在函数名、文件和行号信息之前,显示地址,以十六进制形式。

-b --target=<bfdname>:指定目标文件的格式为bfdname。

-e --exe=<executable>:指定需要转换地址的可执行文件名。

-i --inlines : 如果需要转换的地址是一个内联函数,则输出的信息包括其最近范围内的一个非内联函数的信息。

-j --section=<name>:给出的地址代表指定section的偏移,而非绝对地址。

-p --pretty-print:使得该函数的输出信息更加人性化:每一个地址的信息占一行。

-s --basenames:仅仅显示每个文件名的基址(即不显示文件的具体路径,只显示文件名)。

-f --functions:在显示文件名、行号输出信息的同时显示函数名信息。

-C --demangle[=style]:将低级别的符号名解码为用户级别的名字。

-h --help:输出帮助信息。

-v --version:输出版本号。


常见用法:

addr2line 0x00000000004005e7 -e test 


objdump反汇编常用参数

objdump -d <file(s)>: 将代码段反汇编;

objdump -S <file(s)>: 将代码段反汇编的同时,将反汇编代码与源代码交替显示,编译时需要使用-g参数,即需要调试信息;

objdump -C <file(s)>: 将C++符号名逆向解析

objdump -l <file(s)>: 反汇编代码中插入文件名和行号

objdump -j section <file(s)>: 仅反汇编指定的section


参数非常多,建议使用

objdump --help 或者 man objdump查看完全用法。


获取Demangle前的原始文件名


例如:_ZN13TempTableImpl18GetTransformRecordERSt6vectorI11ValueObjectSaIS1_EER11MDFIteraRS0_IP16LogicalAttributeSaIS8_EEP11PATableInfoPvP11PATableImplxPS0_ISsSaISsEE


在linux命令行使用c++filter


$ c++filt ....

TempTableImpl::GetTransformRecord(std::vector<ValueObject, std::allocator<ValueObject> >&, MDFIterator&,bool,std::vector<LogicalAttribute*, std::allocator<LogicalAttribute*> >&, PATableInfo*, void *, PATableImpl *, long  long, std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char<std::char_traits<char>, std::allocator<char> > > >*)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论