mtrace
-
Da mein Laptop den Geist aufgegeben hat bin ich atm unter Linux unterwegs und habe erstmal geguckt, wie ich Memoryleaks zum debuggen finde.
gekommen bin ich dann auf mtrace, aber irgendwie functioniert das nicht so, wie es sollte:
Er findet keinen Memoryleak, obwohl ich absichtlich einen reingemacht habe:#include <mcheck.h> #include <iostream> int main() { mtrace(); int* a = (int*)malloc(sizeof(int)); std::cout << "test" << std::endl; }
Ich denke es ist unverkennbar, dass da einer ist^^
Aber in der Konsole sah das ganze dann so aus:user&directory> ./memtest test user&directory> mtrace ./memtest No memory leaks.
Was muss ich tun, damit er die leaks korrekt findet?
-
MIr fallen jetzt viele Gruende fuer ein nicht-finden des Memoryleaks ein, aber:
- wenn ich das richtig gelesen hab muss dein system die Umgebungsvariable MALLOC_TRACE gesetzt haben, und zwar auf den Namen einer Datei in der du schreibrechte hast und in der mtrace() seinen output fabriziert. danach musst du auf der Kommandozeile einfach mtrace ohne parameter aufrufen, damit es den inhalt der datei parsen kann. Wenn MALLOC_TRACE nicht gesetzt ist, oeffnet das Programm wohl ne leere Datei oder garkeine Datei und wo nichts steht gibts keine memory leaks.
Davon abgesehn: sei aeusserst vorsichtig mit malloc, benutz in C++ lieber new und delete.
-
nimm das
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
hi,
so wie ich das gesehen habe benutzt du mtrace falsch!1) Ein Terminal / Shell öffnen und die Environment-Variable MALLOC_TRACE=tracedatei setzen ( Beispiel: export MALLOC_TRACE=mlog )
2) Code kompilieren
3) mtrace programm tracedatei ausführen ( Beispiel: mtrace memtest mlog )
So funktioniert das.
mfg blan
-
Benutze einfach Valgrind.