Klasse um vergessene Objekte im Speicher im Zugriff zu haben.
Inspiriert von Rainer Grimm und Mouaz Chamieh.
Mehr ...
#include <MemoryLeakIndicator.h>
|
struct | MemoryItem |
| Referenz auf das instantiierte Objekt mit Dateinamen und Zeile, in der es instantiiert wurde. Mehr ...
|
|
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
- Copyright
- © 2021 Helmut Jakoby
◆ 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.
◆ 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 |
◆ 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] | ipAddress | Die 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]
Liefert ein MemoryItem-Objekt aus der Liste der MemoryItem-Objekte in Bezug auf eMode.
- Parameter
-
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] | pNewObject | Der Zeiger auf das neue einzufügende Objekt. |
[in] | chFileName | Der Name der Datei, in dem das neue Objekt erzeugt wurde. |
[in] | iLine | Die 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=()
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] | pObjectToDelete | Referenz 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] | bAllowed | Wenn 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.
◆ 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: