前言

 

aarch64-linux-gnu-nm freespace
aarch64-linux-nm freespace
aarch64-linux-gnu-nm freespace
aarch64-linux-gnu-objdump -x -s -d freespace

addr2line 0x7f924d2dd0 -e freespace -f
readelf -w freespace
-fsanitize=address -g && ./freespace

 

 

man addr2line

ps -aux -h| grep freespace
top

 

 

如果遇到addr2line得到??:?或??:0的情况,原因就是编译得到的so文件没有附加上符号表(symbolic)信息。

nm命令被用于显示二进制目标文件的符号表;

objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息;

 

 

1.检测内存泄漏,可以用 ps -aux 等工具查看内存异常膨胀
2.定位并处理内存泄漏

  • 静态代码分析工具 BEAM PC-lint splint
  • 动态分析工具 valgrind 、purify
  • 重载类的 new 和 delete 添加日志信息,日志分析定位内存泄漏

最后,发现如果addr2line定位不到问题所在,很有可能是内存泄漏或者野指针,真正的错误位置不一定在运行出错的地方,而在别处!!!

 

参考

1. ​​ARM Linux崩溃分析(一) - 应用程序Segmentation fault的分析​​;

2. ​​unhandled level 2 translation fault (11)​​;

3. ​​OutOfMemoryError系列(8): Kill process or sacrifice child​​;

4. ​​Linux如何调试内存泄漏​​;

5. ​​linux 如何调试内存泄漏问题​​;

6. ​​Linux平台中调试C/C++内存泄漏方法 (腾讯和MTK面试的时候问到的)​​;