vmmap
是一个在 Windows 平台上用于查看和分析进程的虚拟内存分配的工具,它通常作为 Sysinternals 套件的一部分提供。虽然 vmmap
本身不直接提供内存泄漏跟踪的功能,但它是一个非常有用的工具,可以帮助你识别哪些模块或内存类型正在占用大量的内存,进而帮助你缩小内存泄漏的搜索范围。
以下是通过 vmmap
跟踪和调查内存泄漏的一些步骤:
1. 安装 Sysinternals 套件
首先,你需要从 Microsoft 的官方网站下载并安装 Sysinternals 套件。
2. 启动 vmmap
打开 vmmap
工具。
3. 选择目标进程
4. 选择目标进程
在 vmmap
的界面上,点击“文件”->“选择进程”或者使用快捷键(通常是 Ctrl+P),然后:
1、选择需要跟踪的进程。
2、或者直接通过启动程序的方式打开一个新进程,更推荐打开程序的方式,这样后续有的操作才能开展。
5. 设置应用程序路径并启动
6. 分析内存使用
vmmap
会显示该进程的内存使用情况,包括不同的内存区域(如私有堆、堆栈、映射文件等)和它们的大小。
7. TimeLine跟踪:
8. 通过选择Timeline区域来查看内存情况
9. Trace
单击VMMap 窗口底部的Trace
10. 按字节列排序并滚动到列表顶部
它应该看起来像这样,其中第一项的 Bytes 值比其他项大得多: 如果第一项没有相对较大的 Bytes 值,那么您可能需要多次触发泄漏(保持 VMMap 运行并记住每次回到它时都要刷新它),否则您可能根本不正确地认为存在泄漏。
11. Stack
选择第一项,然后单击Trace 窗口底部的Stack
12. 查看源代码
您现在将看到分配内存时涉及的 DLL列表,如下所示: 导致内存泄漏的组件通常是列表中的第一个非 Windows DLL。您通常可以忽略路径以C:\Windows开头的那些(例如 ntdll.dll 和 user32.dll),选择疑似内存泄漏的dll,然后点击source即可跟踪到源码。
前提:设置过source路径
请记住,内存泄漏通常是由于未正确管理内存(如忘记释放已分配的内存)导致的。因此,在编写代码时,始终确保在不再需要时释放所有分配的内存,并避免使用可能导致内存泄漏的编程模式。