Nadpisywanie „nowych” i danych logowania o dzwoniącym
Próbuję napisać profiler pamięci i jak dotąd udało mi się uruchomić moje niestandardowe funkcje w malloc, free, new i delete. Próbowałem użyć__FILE__
i__LINE__
aby zarejestrować inicjatora w przeciążonej nowej metodzie, ale (zgodnie z oczekiwaniami) podaje tylko szczegóły dotyczące miejsca przeciążenia. Czy istnieje sposób na pobranie szczegółów dotyczących inicjatora do przeciążonych funkcji bez wprowadzania zmian w istniejącym kodzie testowanego komponentu (np. #Define dla malloc)?
Używana przeze mnie funkcja to:
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;
}
Funkcja bool b_MemProfStarted jest używana do unikania rekurencyjnych wywołań funkcji ofstream i map.insert.