Substituir dados "novos" e de registro sobre o chamador
Estou tentando escrever um perfilador de memória e até agora consegui fazer com que minhas funções personalizadas funcionassem para malloc, free, new e delete. Eu tentei usar__FILE__
e__LINE__
para registrar o originador dentro do novo método sobrecarregado, mas (como esperado) ele apenas fornece os detalhes de onde a função sobrecarregada está. Existe uma maneira de obter os detalhes sobre o originador para as funções sobrecarregadas sem fazer nenhuma alteração no código existente do componente que está sendo testado (como #define para malloc)?
A função que estou usando é:
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;
}
O bool b_MemProfStarted é usado para evitar chamadas recursivas em ofstream e map.insert.