Wie erfolgt die Speicherprüfung für ein Daemon-Programm?

8

Ich habe eine C ++ - Anwendung geschrieben, die solange läuft, bis sie manuell beendet wird. Es überwacht andere wichtige Anwendungen. Daher sollte meine Daemon-Anwendung nicht untergehen. In diesem Sinne möchte ich sehen, ob es irgendwelche Speicherlecks in meiner Anwendung gibt. Ich habe Valgrind verwendet, aber da diese Anwendung für immer läuft, wird das Valgrind nicht beendet. Wenn ich ein Control - C mache, bekomme ich keine vollständigen Informationen aus der Valgrind Logdatei.

Gibt es ein Werkzeug, das Valdrind machen kann?

    
Alwin Doss 14.02.2012, 11:28
quelle

3 Antworten

5

Ich glaube, Sie können gdb mit einem laufenden valgrind-Prozess verbinden und ihn anweisen, explizit eine Lecksuche durchzuführen.

Ich habe das nicht versucht, nur in den Dokumenten .

Bei einem Verbindungsbruch:

GDB mit einem Valgrind gdbserver verbinden

%Vor%

(Der Fehlerparameter ist die Anzahl der Fehler, bevor der gdbserver aktiv wird: Null bedeutet, dass er sofort ausgeführt wird).

Dann starte gdb in deinem Programm und verbinde dich mit dem entfernten Ziel

%Vor%

und um die Prüfung auszulösen

%Vor%

Weitere Informationen finden Sie in Ihren Dokumenten oder in den verknüpften Dokumenten.

    
Useless 14.02.2012, 11:36
quelle
4

Der offensichtlichste Weg besteht darin, eine saubere Methode hinzuzufügen, um den Daemon herunterzufahren, vielleicht indem er das Signal SIGTERM abfängt und herunterfährt. Andernfalls wird jeder Speicher, der (rechtmäßig) benutzt wird, wenn Sie den Daemon beenden, die Ergebnisse verkomplizieren.

Alternativ gibt es valgrind Client-Anfragen VALGRIND_DO_LEAK_CHECK VALGRIND_DO_ADDED_LEAK_CHECK VALGRIND_DO_CHANGED_LEAK_CHECK, die Sie könnten auslösen in deinem Daemon, vielleicht auf einem Timer. Wenn Sie dann die Ergebnisse vergleichen, werden Sie möglicherweise auf Lecks aufmerksam gemacht.

    
Douglas Leeder 14.02.2012 11:32
quelle
0

Sie können keine Lecks erkennen, ohne sie irgendwann zu beenden. Ich denke, du kannst Valgrind benutzen und den Deamon nach etwa 5 Minuten verlassen. Dann wird Valgrind Ihre Lecks melden. Beachten Sie, dass, wenn Ihr deamon kontinuierlich das Zuweisen von Speicher aufgrund eines logischen Fehler im Algorithmus, es immer noch genügend Speicherplatz können, ohne undichte Stellen im Code.

    
perreal 14.02.2012 11:35
quelle