程序中出现了严重内存泄漏。虽然程序不大,但靠review代码排错很困难,而且个人的所知有限,有些代码错误认识不到。
通过使用mtrace工具,排查出了问题。记录如下:
1. 在main()函数开始的时候,加入mtrace();
2. 在程序退出处理的函数中加入muntrace();
void signal_exit_handler(int sig)
{
exit(0);
}
void server_on_exit(void)
{
muntrace();
printf("server_on_exit muntrace()\n");
}
int main(int argc, char *argv[])
{
......
atexit(server_on_exit);
return 0;
}
3. 包含头文件 #include <mcheck.h>
4. 编译时加上 -g 参数
5. 设置环境变量MALLOC_TRACE
shell中运行 export MALLOC_TRACE=./test.log
或者
程序中添加 setenv("MALLOC_TRACE", "output", 1);
6. 运行程序后分析内存泄漏
mtrace <程序名> $MALLOC_TRACE
7. 查找在源代码中的位置
addr2line -f -e <程序名> <指令地址>
参考: