可以学习的路径:
https://www.cnblogs.com/lidabo/category/542683.html
背景
对稳定性缺陷解决的思考
一,缺陷解决的方法
二,抽象问题的解决过程,演绎和归纳
三,代码质量及意识,程序员的职业素养
一、最常见的gdb和gdb server
1、排查设备堆、栈越界崩溃问题
2、排查设备卡死问题
见文章:
https://blog.csdn.net/zhang_yin_liang/article/details/79589356
二、strace工具
1、排查设备卡死,strace -p来跟踪
按照strace官网的描述, strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。
参考文章:
https://www.jianshu.com/p/33521124bdf2
三、dmalloc
1、检查堆越界
2、检查内存泄漏
参考文章:
https://www.cnblogs.com/lidabo/p/5486009.html
https://blog.csdn.net/liujianfeng1984/article/details/11958201
四、tcmalloc
1、排查内存泄漏问题产生的OOM
TCMalloc全称Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,用于替代系统的内存分配相关的函数(malloc、free,new,new[]等)。
参考文章:
https://www.jianshu.com/p/11082b443ddf
https://www.cnblogs.com/my_life/articles/4661790.html
五、mtrace
1、排查内存泄漏问题产生的OOM
mtrace的原理是记录每一对malloc-free的执行,若每一个malloc都有相应的free,则代表没有内存泄露,对于任何非malloc/free情況下所发生的内存泄露问题,mtrace并不能找出来。
#include <iostream>
#include <mcheck.h>
#include <stdlib.h>
using namespace std;
int main()
{
setenv("MALLOC_TRACE","output",1); // stdlib.h ,指定输出文件名
mtrace();
int *p1=new int;
int *p2=new int; // line 11
int *p3=(int*)malloc(sizeof(int));
int *p4=(int*)malloc(sizeof(int)); // line 13
delete p1;
free(p3);
return 0;
}
参考文章: