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.

questionAnswers(2)

yourAnswerToTheQuestion