Memory Leak Detection

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Mirror
Establishment
Beiträge: 253
Registriert: 25.08.2019, 05:00
Alter Benutzername: gdsWizard
Kontaktdaten:

Memory Leak Detection

Beitrag von Mirror »

Hallo,


bei meinem Programm kommt es zu geringen Speicherblockverlusten. Dabei werden vermutlich mit new erzeugte Objekte nicht wieder freigegeben.

Ich habe früher VLD benutzt, aber scheinbar geht es nicht mit VS 2019...Was benutzt ihr um solche Probleme zu beheben ?
Hat den StormWizard 1.0 und 2.0 verbrochen. http://www.mirrorcad.com
NytroX
Establishment
Beiträge: 363
Registriert: 03.10.2003, 12:47

Re: Memory Leak Detection

Beitrag von NytroX »

Du kannst das hier mal versuchen, das hat mir schon oft geholfen:
https://docs.microsoft.com/en-us/visual ... ew=vs-2019

Ich selbst habe für VS auch nichts wirklich Gutes finden können.
Ist aber bei mir nicht wirklich schlimm, weil ich einfach vermeide, new oder malloc zu verwenden.
Stattdessen kann man Allokatoren verwenden, da kann man dann meistens die Leaks leicht finden.
Oder natürlich die klassischen unique_ptr bzw. shared_ptr.
Ich teile meinen Code einfach auf in "Low-Level" Teile und höhere Abstraktionen, dann hat man nur wenige Stellen wo überhaupt Leaks entstehen können.

Zudem schreibe ich Software meistens cross-platform, dann kann ich auch valgrind usw benutzen.
Das Ganze hilft natürlich nicht bei gewachsenen, ungepflegten Projekten.
Mirror
Establishment
Beiträge: 253
Registriert: 25.08.2019, 05:00
Alter Benutzername: gdsWizard
Kontaktdaten:

Re: Memory Leak Detection

Beitrag von Mirror »

Ich habe das schon ausprobiert. Er zeigt mir aber nicht die Zeile und die Datei und das obwohl ich das

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

in meine Hauptinclude Datei ( nicht stdafx.h ) eingegeben habe. Aus irgendeinem Grund fehlen diese wichtigen Angaben,
Hat den StormWizard 1.0 und 2.0 verbrochen. http://www.mirrorcad.com
NytroX
Establishment
Beiträge: 363
Registriert: 03.10.2003, 12:47

Re: Memory Leak Detection

Beitrag von NytroX »

:-(

Ist bei mir leider auch schon ein paar Jahre her, dass ich das benutzt habe... aktuell bin ich unter Linux und kanns leider nicht probieren.
Jemand anderes Erfahrungen damit?
Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Memory Leak Detection

Beitrag von Krishty »

Gibt das _CRTDBG_MAP_ALLOC mal in den Präprozessor-Einstellungen deines Projekts an, statt in einzelnen Quelldateien.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Mirror
Establishment
Beiträge: 253
Registriert: 25.08.2019, 05:00
Alter Benutzername: gdsWizard
Kontaktdaten:

Re: Memory Leak Detection

Beitrag von Mirror »

Das Eingeben in die Präprozessor-Einstellungen hat teilweise Erfolg gehabt. Ich habe jetzt noch 2 zusätzliche Leaks. Bei denen zeigt er die Zeile und den Dateinamen an, aber nicht bei mit new allozierten Objekten.
Hat den StormWizard 1.0 und 2.0 verbrochen. http://www.mirrorcad.com
Benutzeravatar
Jonathan
Establishment
Beiträge: 2367
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Memory Leak Detection

Beitrag von Jonathan »

Ich habe mehrmals erfolgreich Dr. Memory benutzt um Speicherzugriffsfehler zu finden (insbesondere uninitialized reads). Es kann aber eben auch Memory-Leaks finden. Man muss ein wenig auf die Kompilereinstellungen achten und vermutlich einige Filter erzeugen um false Positives aufzuräumen, aber ich fand den Aufwand für den Nutzer sehr vertretbar:

https://drmemory.org/
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Mirror
Establishment
Beiträge: 253
Registriert: 25.08.2019, 05:00
Alter Benutzername: gdsWizard
Kontaktdaten:

Re: Memory Leak Detection

Beitrag von Mirror »

Danker für den Link. Ich habe Dr.Memory auch mittels Google gefunden gehabt. Ich habe aber gestern mit der Deleaker Demo Erfolg gehabt. Die Demo Version hat zwar die Zeile nicht angezeigt, aber in dem Quelltext hatte ich nur im Konstruktor ein anderes Objekt mittels new erzeugt.
Leider ist Deleaker relativ teuer.
Hat den StormWizard 1.0 und 2.0 verbrochen. http://www.mirrorcad.com
Antworten