作者:sunshinena | 来源:互联网 | 2024-11-02 20:00
在Linux环境下进行C++代码调试是开发过程中不可或缺的一环。本文将详细介绍如何利用GDB等调试工具,结合实际案例,帮助初学者掌握高效的调试技巧,提升编程能力。内容涵盖环境配置、断点设置、变量查看及内存分析等方面,旨在为读者提供全面的调试指南。
前言
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面试的时候问到的);
完