VLD (Visual LeakDetector) 内存泄露库的使用,VLD 是一款用于 Visual C++ 的免费内存泄漏检查工具。
VLD 网址:vld.codeplex.com
VLD 工具原理。在初始化是 VLD 使用 _CrtSetAllocation 注册这个钩子函数。
int AllocHook(int allocType,
void* userData, size_t size,
int blockType, long requestNumber,
const unsigned char* filename, int lineNumber);
在实际使用中,发现存在误报的情况,lib & exe 就报泄漏,改成 dll & exe 就没有报告了。
#include <iostream>
#include "vld\include\vld.h"
__declspec(dllimport) int pdfocr_wmain(int argc, wchar_t** argv);
// 新建一个工程,解决 vld 内存监控误报的问题。
int wmain(int argc, wchar_t** argv) {
return pdfocr_wmain(argc, argv);
}
lsan_suppressions.txt
LeakSanitizer 是一个运行时期的内存泄漏检测器。可以跟 AddressSanitizer 结合起来,用于检测内存错误及内存泄漏,也可以单独使用。LSan 几乎不会带来性能上的影响,直到程序终止。即一旦检测到内存问题,程序即会终止,这一点与 ASan 一致。
DrMemory-Windows-sfx.exe
Dr. Memory (www.drmemory.org) is an open-source dynamic memory monitoring tool for Windows, Linux, and Mac.
https://github.com/LouisBrunner/valgrind-macos
C++ 内存检查 (Valgrind VS Asan) https://zhuanlan.zhihu.com/p/508470880
内存泄露 from 大神同事 zōu mǐn
。
这个最好用,比那个 UMDH 好用多了。
分析工具:
Leakdiag
步骤:
bp ntdll!RtlAllocateHeap "j(poi(@esp+c) = 16384) 'k';'gc'"