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> > > >*)




