我正在尝试编写一个内存分析器,到目前为止,我已经能够让我的自定义函数适用于 malloc、free、new 和 delete。我尝试使用__FILE__
并__LINE__
在重载的新方法中记录发起者,但是(正如预期的那样)它只提供了重载函数所在位置的详细信息。有没有办法在不对被测试组件的现有代码进行任何更改的情况下获取有关重载函数的发起者的详细信息(例如 #define for malloc)?
我正在使用的功能是:
void* operator new (size_t size)
{
if(b_MemProfStarted)
{
b_MemProfStarted = false;
o_MemLogFile << "NEW: " << "| Caller: "<< __FILE__ << ":"
<< __LINE__ << endl;
b_MemProfStarted = true;
}
void *p=malloc(size);
if (p==0) // did malloc succeed?
throw std::bad_alloc(); // ANSI/ISO compliant behavior
return p;
}
bool b_MemProfStarted 用于避免对 ofstream 和 map.insert 的递归调用。