1. readelf 命令
readelf 命令一般用于查看 ELF 格式的文件信息,常见的文件如在Linux上可执行文件,动态库(*.so) 或者 静态库(*.a) 等包含 ELF 格式的文件。
常用选项如下:
-h (elf header),显示 elf 文件开始的文件头信息。
-V (version info),显示版本段信息。
使用如下:
readelf -h main.out //查看main.out 文件头信息
2. addr2line 命令
addr2line 命令用于将程序指令地址转换为所对应的函数名、以及函数所在的源文件名和行号。
作用:当含有调试信息( -g ) 的执行程序出现 crash (core dumped) 时,可使用 addr2line 命令快速定位出错的位置。
如果无法确定文件名或函数名,addr2line 将在它们的位置打印两个问号;
如果无法确定行号,addr2line 将打印 0 或一个问号。
注意:代码编译时不要忘记加 -g 选项,否则在使用 addr2line 命令时无法显示文件名和行号。
常用选项如下:
-a:在函数名、文件和行号信息之前,显示地址,以十六进制形式
-e:指定需要转换地址的可执行文件名
-f:在显示文件名、行号输出信息的同时显示函数名信息
使用如下:
addr2line -f -e /to/path/libvitae.so //在显示文件名、行号输出信息的同时显示函数名。
addr2line 0x00123456 -e main.out -f -a -p -C //将地址0x00123456转换定位到 C 代码中出错的位置
addr2line 可以配合 strace 命令和 dmesg 命令来调试 coredump文件。