7 #include "CallStack.hpp"
13 #define _CRTDBG_MAP_ALLOC
18 #include <..\crt\src\dbgint.h>
22 #include <boost/filesystem/path.hpp>
28 struct AllocBlockInfo :
public CallStack
30 AllocBlockInfo() : address(NULL), size(0), lineNumber(0), occurance(0)
32 memset(fileName, 0, MLD_MAX_NAME_LENGTH *
sizeof(TCHAR));
37 TCHAR fileName[MLD_MAX_NAME_LENGTH];
42 typedef std::map<LPVOID, AllocBlockInfo> KEYMAP;
43 typedef std::map<LPVOID, AllocBlockInfo>::iterator POSITION;
44 typedef std::pair<LPVOID, AllocBlockInfo> KEYVALUE;
53 inline BOOL Lookup(LPVOID pAddr, AllocBlockInfo& aInfo) {
55 m_Pos = m_Map.find(pAddr);
57 if (m_Pos == m_Map.end())
63 aInfo = m_Pos->second;
68 inline POSITION end() {
73 inline void RemoveKey(LPVOID pAddr) {
78 inline void RemoveAll() {
82 void SetAt(LPVOID pAddr, AllocBlockInfo& aInfo) {
87 inline POSITION GetStartPosition() {
88 POSITION pos = m_Map.begin();
92 inline void GetNextAssoc(POSITION& pos, LPVOID& rAddr, AllocBlockInfo& aInfo) {
99 void InitHashTable(
int preAllocEntries, BOOL flag) {
100 preAllocEntries = NULL;
106 CMemLeakDetect(
const TCHAR * outputDir = NULL);
110 void addMemoryTrace(
void* addr, DWORD asize, TCHAR *fname, DWORD lnum);
111 void redoMemoryTrace(
void* addr,
void* oldaddr, DWORD asize, TCHAR *fname, DWORD lnum);
112 void removeMemoryTrace(
void* addr,
void* realdataptr);
113 void cleanupMemoryTrace();
114 void writeOutput(
const TCHAR * szOutput);
115 void dumpMemoryTrace();
118 CMapMem m_AllocatedMemoryList;
125 std::vector<std::basic_string<TCHAR> > m_funcsToIgnore;
126 boost::filesystem::path m_outputFolder;
130 std::string m_outputPath;
131 std::ofstream m_output;
140 CMemLeakDetect(
const TCHAR * = NULL)