15,471
社区成员
发帖
与我相关
我的任务
分享
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include<stdlib.h>
//#include <malloc.h>
#include<crtdbg.h>
#endif
#ifdef _DEBUG
CString str_filename = _T("memleak.log");
HANDLE hLogFile;//声明日志文件句柄
hLogFile = CreateFile(str_filename, GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);//创建日志文件
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);//将warn级别的内容都输出到文件(注意dump的报告级别即为warning)
_CrtSetReportFile(_CRT_WARN, hLogFile);//将日志文件设置为告警的输出文件
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF);
#endif
m_threadMassTest = AfxBeginThread((AFX_THREADPROC)Grab2MassCheck, pDlgThis, THREAD_PRIORITY_HIGHEST);
UINT Grab2MassCheck(LPVOID pParam)
{
while (TRUE)
{
SniffMemLeak(oldstate, newstate, diffstate);
}
return 0;
}
CMemoryState oldstate, newstate, diffstate;
void SniffMemLeak(CMemoryState &oldstate, CMemoryState &newstate, CMemoryState &diffstate)
{
newstate.Checkpoint();
if (diffstate.Difference(oldstate, newstate))
{
oldstate.DumpAllObjectsSince();
newstate.DumpAllObjectsSince();
//dump相邻时间点间的内存块变化
diffstate.DumpStatistics();
}
oldstate.Checkpoint();
SYSTEMTIME *pnow_local_time = nullptr;
pnow_local_time = new SYSTEMTIME;
GetLocalTime(pnow_local_time);
_RPT4(_CRT_WARN, "%02d %02d:%02d:%02d:%04d snapshot dump.\n\n",
pnow_local_time->wDay, pnow_local_time->wHour, pnow_local_time->wMinute, pnow_local_time->wSecond, pnow_local_time->wMilliseconds);
free(pnow_local_time);
pnow_local_time = nullptr;
}
172} normal block at 0x0000025242F94630, 40 bytes long.
Data: < > 04 00 00 00 00 00 00 00 D0 02 E8 14 FF 7F 00 00
{171} normal block at 0x0000025242F93460, 56 bytes long.
Data: < 6 > E8 36 D4 14 FF 7F 00 00 04 00 00 00 CD CD CD CD
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\oleinit.cpp(84) : {167} client block at 0x0000025242F6C740, subtype c0, 104 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a CCmdTarget object at $0000025242F6C740, 104 bytes long
{83} client block at 0x0000025242F8B090, subtype c0, 128 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a CDynLinkLibrary object at $0000025242F8B090, 128 bytes long
Object dump complete.
Dumping objects ->
Object dump complete.
0 bytes in 0 Free Blocks.
1372 bytes in 15 Normal Blocks.
31302 bytes in 143 CRT Blocks.
0 bytes in 0 Ignore Blocks.
2120 bytes in 8 Client Blocks.
Largest number used: 36644 bytes.
Total allocations: 314758 bytes.
12 10:50:29:0743 snapshot dump.
12 10:50:29:0743 snapshot dump.