addr2line的使用,我们在
http://blog.csdn.net/boyxulin1986/article/details/11603353
这篇博文中简单介绍了如core dump/nm/readelf/ldd等linux工具的使用。
今天看来了addr2line,一开始还满心欢喜的以为这样就不需要根据shared library在进程虚拟地址空间
中的起始位置计算地址的偏移量了,但是发现也并不是这么回事。
但是善用一些已知的工具,总是能够帮助我们提高排查和解决问题的效率。
1. 如果在编译程序时,symbol被strip掉,那就无法使用addr2line来获得有效信息,strip -d libtest.so;
2. 如果你要查看的地址位于libtest.so,那首先要cat /proc/pid/maps来获取这个shared library在程序
虚拟地址空间中的起始地址,然后再算出当前地址的偏移量;
3. addr2line address -e libtest.so -f
addr2line参数解释:
-e,用来指定待转换的可执行文件的路径;
-f,用来显示文件名;
待解决问题:
通过实验,发现使用addr2line的实际测试结果竟然与预期不符,是哪里出错了吗?
1. 使用的addr2line不是对应于当前系统的addr2line吗?不同的系统,不同的toolchain,产生的可执行文件可能无法通用;
2. addr2line的结果有可能不是很准确,但是可以作为一个参考,有时候能起到辅助的作用。