【c++基础】linux系统代码调试

前言

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定位不到问题所在,很有可能是内存泄漏或者野指针,真正的错误位置不一定在运行出错的地方,而在别处!!!
 
参考
原文地址:https://www.cnblogs.com/happyamyhope/p/14036118.html