我想分析核心文件分析中的内存泄漏.
我编写了示例代码来注入内存泄漏并使用gcore命令生成核心文件.
#include <stdlib.h>
#include <unistd.h>
void fun()
{
int *ptr = new int(1234);
}
int main()
{
int i=0;
while(i++<2500)
{
fun();
}
sleep(360);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
找到进程ID
ayadav@ajay-PC:~$ ps -aef |grep over
ajay 8735 6016 0 12:57 pts/2 00:00:00 ./over
ayadav 8739 4659 0 12:57 pts/10 00:00:00 grep over
Run Code Online (Sandbox Code Playgroud)
并生成核心
ayadav@ajay-PC:~$ sudo gcore 8735
[sudo] password for ayadav:
0x00007fbb7dda99a0 in __nanosleep_nocancel () at ../sysdeps/unix/syscall-template.S:81
81 ../sysdeps/unix/syscall-template.S: No such file or directory.
Saved corefile core.8735
Run Code Online (Sandbox Code Playgroud)
我已经从核心文件中找到了常见的模式,如下所示(在stackoverflow上建议另一个线程有没有办法找到进程的哪个部分使用了大部分内存,只查看生成的核心文件?)
ayadav@ajay-PC:~$ …Run Code Online (Sandbox Code Playgroud) 我正在尝试寻找一个看起来像内存泄漏的服务器软件中的一个非常难以回避的错误,但memcheck根本没有帮助.我的猜测是,实例化并且从未删除的内存确实没有泄露,所以有一个引用,但现在对程序没用,应该删除.是否有一个工具可以计算内存中的访问而不是引用,因此评估堆中对象的有效使用情况?