1.在头文件里加入以下宏定义代码
#ifdef _DEBUG
#include <stdio.h>
#define xPrintf(...) printf(__VA_ARGS__)
#else
#define xPrintf(...)
#endif
2.在需要输出调试信息的代码块增加打印消息,注意return语句的上方,如下所示:
void* MemoryAlloc::allocMem(size_t nSize)
{
if (!_pBuf)
{
initMemory();
}
MemoryBlock* pReturn = nullptr;
if (nullptr == _pHeader)
{
pReturn = (MemoryBlock*)malloc(nSize + sizeof(MemoryBlock));
pReturn->bPool = false;
pReturn->nID = -1;
pReturn->nRef = 0;
pReturn->pAlloc = nullptr;
pReturn->pNext = nullptr;
}
else
{
pReturn = _pHeader;
_pHeader = _pHeader->pNext;
assert(0 == pReturn->nRef);
pReturn->nRef = 1;
}
xPrintf("allocMem:%lx, id = %d, size = %d\n", pReturn, pReturn->nID, nSize);
return ((char*)pReturn + sizeof(MemoryBlock));
}
3.结果:当编译器切换至Debug模式运行时,每次分配内存时会打印该内存分配信息,当切换至Release模式运行时则不会打印。
知识补充:
1.关于__VA_ARGS__ __VA_ARGS__它是一个可变参数的宏,就是将左边宏中“…” 的内容原样抄写在右边 VA_ARGS 所在的位置。 …缺省号代表一个可以变化的参数表。使用保留名 VA_ARGS 把参数传递给宏。当宏的调用展开时,实际的参数就传递给 printf()了。
|