Überschreiben von "neuen" und Protokolldaten zum Anrufer

Ich versuche, einen Speicherprofiler zu schreiben, und bisher war es mir möglich, meine benutzerdefinierten Funktionen für malloc, free, new und delete zum Laufen zu bringen. Ich habe versucht mit__FILE__ und__LINE__ um den Urheber in der überladenen neuen Methode zu protokollieren, aber (wie erwartet) gibt es nur die Details an, wo sich die überladene Funktion befindet. Gibt es eine Möglichkeit, die Details zum Urheber der überladenen Funktionen abzurufen, ohne Änderungen am vorhandenen Code der zu testenden Komponente vorzunehmen (z. B. #define for malloc)?

Die Funktion, die ich benutze, ist:

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;
}

Das bool b_MemProfStarted wird verwendet, um rekursive Aufrufe von ofstream und map.insert zu vermeiden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage