MemoryLeakIndicator
Lade ...
Suche ...
Keine Treffer
MemSpy::LeakMap Klassenreferenz

Klasse um vergessene Objekte im Speicher im Zugriff zu haben.
Inspiriert von Rainer Grimm und Mouaz Chamieh. Mehr ...

#include <MemoryLeakIndicator.h>

Klassen

struct  MemoryItem
 Referenz auf das instantiierte Objekt mit Dateinamen und Zeile, in der es instantiiert wurde. Mehr ...
 

Öffentliche Methoden

void setLeakMapUseAllowed (bool bAllowed=true)
 
bool leakMapUseAllowed () const
 
unsigned long long numberOfProcessedObjects () const
 
std::size_t sizeOfObjectList () const
 
MemoryItemgetSpyObject (SeekMode eMode)
 
MemoryItemgetSpyObject (INT_PTR ipAddress)
 
void insertSpyObject (void *pNewObject, char const *chFileName, int iLine)
 
void removeSpyObject (void *pObjectToDelete)
 

Öffentliche, statische Methoden

static LeakMapcreate ()
 
static int destroy ()
 
static void destroyAbsolutely ()
 
static LeakMapgetGlobalLeakMapInstance ()
 

Geschützte Methoden

 LeakMap ()
 
virtual ~LeakMap ()
 

Private Methoden

 LeakMap (const LeakMap &)
 
LeakMapoperator= (const LeakMap &)
 

Private Attribute

CRITICAL_SECTION m_LocalCriticalSection
 
std::unordered_map< INT_PTR, MemoryItem * > m_ObjectList
 
std::unordered_map< INT_PTR, MemoryItem * >::iterator m_ObjectListIterator
 
unsigned long long m_ullInsertCounter
 

Statische, private Attribute

static bool ms_bUseLeakMap
 
static int ms_iReferenceCounter
 

Ausführliche Beschreibung

Klasse um vergessene Objekte im Speicher im Zugriff zu haben.
Inspiriert von Rainer Grimm und Mouaz Chamieh.

Siehe auch
https://www.grimm-jaud.de/index.php/blog/operator-new-und-delete-ueberladen und https://github.com/muazsh/MemoryLeakManager
Autor
Helmut Jakoby

Beschreibung der Konstruktoren und Destruktoren

◆ LeakMap() [1/2]

MemSpy::LeakMap::LeakMap ( )
protected

Der Standard-Konstruktor steht nicht zur Verfügung. Eine Instanz bekommt man über LeakMap::create().

◆ ~LeakMap()

virtual MemSpy::LeakMap::~LeakMap ( )
protectedvirtual

Der Destruktor steht nicht zur Verfügung. Ein LeakMap-Objekt darf nur über LeakMap::destroy() aus dem Speicher entfernt werden.

◆ LeakMap() [2/2]

MemSpy::LeakMap::LeakMap ( const LeakMap & )
private

Der Copy-Konstruktor steht nicht zur Verfügung.

Dokumentation der Elementfunktionen

◆ create()

static LeakMap * MemSpy::LeakMap::create ( )
static

Instanziierungsfunktion. Da es sich bei LeakMap um eine Singleton-Class handelt, wird diese von dieser Methode einmalig instanziiert und dann nur noch der Pointer auf die Instanz geliefert.

Rückgabe
Die einzige Instanz dieser Klasse.
Achtung
Die gelieferte Instanz muss mit LeakMap::destroy() aus dem Speicher entfernt werden.

◆ destroy()

static int MemSpy::LeakMap::destroy ( )
static

Wenn die aufrufende Instanz die letzte mit einer Referenz auf die einzige Instanz von LeakMap ist, wird diese Instanz aus dem Speicher entfernt.

Rückgabe
Rückgabe ist die Anzahl der Noch-Referenzen auf diese Instanz.

◆ destroyAbsolutely()

static void MemSpy::LeakMap::destroyAbsolutely ( )
static

Es wird ohne Abfrage von ms_iReferenceCounter die einzige Instanz von LeakMap aus dem Speicher entfernt.

Achtung
Das sollte nur am Ende der main erfolgen.

◆ getGlobalLeakMapInstance()

static LeakMap * MemSpy::LeakMap::getGlobalLeakMapInstance ( )
static

Liefert g_pVoidLeakMap gecastet auf LeakMap, wenn instantiiert.

◆ getSpyObject() [1/2]

MemoryItem * MemSpy::LeakMap::getSpyObject ( INT_PTR ipAddress)

Liefert ein MemoryItem-Objekt aus der Liste der MemoryItem-Objekte welches das Objekt mit der übergebenen Adresse referenziert.

Parameter
[in]ipAddressDie auf INT_PTR gecastete Adresse des gesuchten Objektes.
Rückgabe
Wenn gefunden das MemoryItem-Objekt, ansonsten NULL_PTR.
Achtung
Die aufrufende Instanz darf das gelieferte Objekt nicht aus dem Speicher entfernen.

◆ getSpyObject() [2/2]

MemoryItem * MemSpy::LeakMap::getSpyObject ( SeekMode eMode)

Liefert ein MemoryItem-Objekt aus der Liste der MemoryItem-Objekte in Bezug auf eMode.

Parameter
[in]eModeDer Suchmodus

Parameterbeispiele:

  • START = liefert erstes Element
  • CURRENT = liefert aktuelles Element
  • NEXT = liefert nächstes Element
Rückgabe
Wenn gefunden das MemoryItem-Objekt, ansonsten NULL_PTR.
Achtung
Die aufrufende Instanz darf das gelieferte Objekt nicht aus dem Speicher entfernen.

◆ insertSpyObject()

void MemSpy::LeakMap::insertSpyObject ( void * pNewObject,
char const * chFileName,
int iLine )

Fügt ein MemoryItem-Objekt in die Liste der MemoryItem-Objekte ein.

Parameter
[in]pNewObjectDer Zeiger auf das neue einzufügende Objekt.
[in]chFileNameDer Name der Datei, in dem das neue Objekt erzeugt wurde.
[in]iLineDie Zeilennummer, in dem das neue Objekt erzeugt wurde.

◆ leakMapUseAllowed()

bool MemSpy::LeakMap::leakMapUseAllowed ( ) const

Wird in operator new( size_t, const char *, int ) oder operator delete( void * ) aufgerufen, um zu bestimmen ob LeakMap genutzt werden soll.

Rückgabe
Wenn true, wird das neu instantiierte bzw. aus dem Speicher entfernte Objekt von LeakMap verarbeitet.
Siehe auch
ms_bUseLeakMap

◆ numberOfProcessedObjects()

unsigned long long MemSpy::LeakMap::numberOfProcessedObjects ( ) const

Liefert die Anzahl der bislang verarbeiteten Objekte.

Rückgabe
s.o.

◆ operator=()

LeakMap & MemSpy::LeakMap::operator= ( const LeakMap & )
private

Der Zuweisungsoperator steht nicht zur Verfügung.

◆ removeSpyObject()

void MemSpy::LeakMap::removeSpyObject ( void * pObjectToDelete)

Entfernt ein MemoryItem-Objekt aus der Liste der MemoryItem-Objekte.

Parameter
[in]pObjectToDeleteReferenz auf das zu löschende Objekt.

◆ setLeakMapUseAllowed()

void MemSpy::LeakMap::setLeakMapUseAllowed ( bool bAllowed = true)

Wird in MemSpy::finishMemoryMonitoring (...) aufgerufen, um die Speicherüberwachung zu deaktivieren.

Parameter
[in]bAllowedWenn true, wird die Speicherüberwachung aktiviert, ansonsten deaktiviert.
Siehe auch
ms_bUseLeakMap

◆ sizeOfObjectList()

std::size_t MemSpy::LeakMap::sizeOfObjectList ( ) const

Liefert die Anzahl der Einträge in m_ObjectList.

Rückgabe
s.o.

Dokumentation der Datenelemente

◆ m_LocalCriticalSection

CRITICAL_SECTION MemSpy::LeakMap::m_LocalCriticalSection
private

Um einen Thread-sicheren Zugriff auf die Liste der Objekte zu haben, wird über diesen lokalen Mutex der Zugriff synchronisiert.

◆ m_ObjectList

std::unordered_map< INT_PTR, MemoryItem * > MemSpy::LeakMap::m_ObjectList
private

Die Liste der MemoryItem-Objekte. Der Index ist die, auf INT_PTR gecastete Adresse der einzelnen Objekte.

◆ m_ObjectListIterator

std::unordered_map<INT_PTR,MemoryItem*>::iterator MemSpy::LeakMap::m_ObjectListIterator
private

Ein interner Iterator auf die Liste der MemoryItem-Objekte.

◆ m_ullInsertCounter

unsigned long long MemSpy::LeakMap::m_ullInsertCounter
private

Ein Zähler, der bei jedem eingefügten Objekt inkrementiert wird.

◆ ms_bUseLeakMap

bool MemSpy::LeakMap::ms_bUseLeakMap
staticprivate

Nur wenn true, wird LeakMap in new (...) und delete (...) genutzt. Ist notwendig, um eigene Aufrufe von new und delete nicht rekursiv hier zu bearbeiten.

◆ ms_iReferenceCounter

int MemSpy::LeakMap::ms_iReferenceCounter
staticprivate

Der Referenzzähler auf die einzige Instanz dieser Klasse.


Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei: