C++ 如何创建内存转储和分析内存泄漏?

C++ 如何创建内存转储和分析内存泄漏?,c++,memory-leaks,C++,Memory Leaks,我需要获得以下信息来分析内存泄漏问题。怎么做 孤立块地址孤立调用 堆叠 是否有好的资源/工具可以了解/修复内存泄漏 谢谢如果您使用的是linux,请使用。这是你最好的新朋友。我不确定Windows有哪些可用工具。如果您使用的是linux,请使用。这是你最好的新朋友。我不确定Windows可以使用哪些工具。是的,正如J.Paulett所评论的,至少在Linux平台上Valgrind是一个很好的起点。是的,正如J.Paulett所评论的,至少在Linux平台上Valgrind是一个很好的起点。V

我需要获得以下信息来分析内存泄漏问题。怎么做

  • 孤立块地址孤立调用
  • 堆叠
是否有好的资源/工具可以了解/修复内存泄漏


谢谢

如果您使用的是linux,请使用。这是你最好的新朋友。我不确定Windows有哪些可用工具。

如果您使用的是linux,请使用。这是你最好的新朋友。我不确定Windows可以使用哪些工具。

是的,正如J.Paulett所评论的,至少在Linux平台上Valgrind是一个很好的起点。

是的,正如J.Paulett所评论的,至少在Linux平台上Valgrind是一个很好的起点。

Valgrind--leak check=full

在Windows中,您可以使用
dbghelp.dll
中的
MiniDumpWriteDump
函数

这对于跟踪已部署应用程序中的错误非常有帮助,因为您可以使用调试符号检查在没有调试信息的字段中生成的小型转储。但是,它对于跟踪内存泄漏不是很有用

对于Windows下的内存泄漏(当然,除了商业工具,如和),您可以使用免费软件包中的WinDbg以及Win32堆标记来跟踪内存泄漏的来源


在Windows中,您可以使用
dbghelp.dll
中的
MiniDumpWriteDump
函数

这对于跟踪已部署应用程序中的错误非常有帮助,因为您可以使用调试符号检查在没有调试信息的字段中生成的小型转储。但是,它对于跟踪内存泄漏不是很有用

对于Windows下的内存泄漏(当然,除了商业工具,如和),您可以使用免费软件包中的WinDbg以及Win32堆标记来跟踪内存泄漏的来源


如果您在Windows平台上,则执行类似于valgrind的内存分析。

如果您在Windows平台上,则执行类似于valgrind的内存分析。

在Windows上,我能够使用UIforETW获得必要的详细信息,UIforETW处理xperf的必要命令行参数

这篇博文非常详细地解释了一切:


记录 步骤1:创建一个TracingFlags注册表项,并在映像文件执行选项中将其设置为“1”,用于跟踪将要跟踪的每个进程名称,以告知Windows堆在启动具有该名称的进程时将其自身配置为跟踪。与图像文件执行选项的情况一样,这些选项不会影响已经运行的进程–只有在设置注册表项时启动的进程才会受到影响

步骤2:使用“-heap-Pids 0”咒语创建额外的ETW会话。此会话将记录启动时TracingFlags注册表项为“1”的进程的信息

细节有点混乱,但是现在UIforETW已经写好了,我不必费心解释细节,你也不必假装听。如果您想记录堆跟踪,请使用UIforETW,如果您想知道它是如何工作的,请查看代码,或者单击Show commands按钮查看大部分脏东西

分析 可以使用WPA(Windows性能分析器)检查记录,WPA可以方便地从UIforETW启动

建议的列有:进程、句柄、类型、堆栈

分配类型包括:

  • AIFO–内部分配,外部释放(提示,提示)
  • AOFI–外部分配,内部释放
  • AOFO–分配到外部释放到外部
  • AIFI–内部分配内部释放

在Windows上,我能够使用UIforETW获得必要的详细信息,UIforETW正在处理xperf的必要命令行参数

这篇博文非常详细地解释了一切:


记录 步骤1:创建一个TracingFlags注册表项,并在映像文件执行选项中将其设置为“1”,用于跟踪将要跟踪的每个进程名称,以告知Windows堆在启动具有该名称的进程时将其自身配置为跟踪。与图像文件执行选项的情况一样,这些选项不会影响已经运行的进程–只有在设置注册表项时启动的进程才会受到影响

步骤2:使用“-heap-Pids 0”咒语创建额外的ETW会话。此会话将记录启动时TracingFlags注册表项为“1”的进程的信息

细节有点混乱,但是现在UIforETW已经写好了,我不必费心解释细节,你也不必假装听。如果您想记录堆跟踪,请使用UIforETW,如果您想知道它是如何工作的,请查看代码,或者单击Show commands按钮查看大部分脏东西

分析 可以使用WPA(Windows性能分析器)检查记录,WPA可以方便地从UIforETW启动

建议的列有:进程、句柄、类型、堆栈

分配类型包括:

  • AIFO–内部分配,外部释放(提示,提示)
  • AOFI–外部分配,内部释放
  • AOFO–分配到外部释放到外部
  • AIFI–内部分配内部释放

Valgrind通常用于分析和捕获内存泄漏。Valgrind通常用于分析和捕获内存泄漏。