Einzelnen Beitrag anzeigen

Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.064 Beiträge
 
Delphi 5 Professional
 
#1

Speicherlecks in fremdem Code/Programm finden

  Alt 30. Dez 2016, 20:34
Hallo Leute ,

ich hoffe, die Experten für C++ sind anwesend, denn ich habe dazu eine Problemstellung. Gegeben ist eine Software, die jemand anders in Visual C++ 2008 geschrieben hat, und eindeutig Speicherlecks aufweist. Es handelt sich hierbei um ein nicht-visuelles Client/Server- oder besser Server/Agent-System, bei dem der Agent als Dienst auf einem Windows läuft. Um den Agent geht es und nur der ist auch relevant.

Wie komme ich auf die Speicherlecks? Mit der Laufzeit des Diensts wird der Speicherverbrauch immer größer, vor allem stechen hier die Private Bytes und das Private Working Set heraus (ermittelt mit Process Explorer und Process Hacker). Um mal eine Größenordnung zu nennen: Nach dem Start des Diensts bewegt sich dessen Speicherverbrauch so um die 5 MB, nach einer Woche sind es bereits 20-25 MB; im x64-Kompilat ist es noch schlimmer, da habe ich nach einer Woche Laufzeit schon über 100 MB gesehen.

Würde man den Agent/Dienst nicht wöchentlich neu starten, stiege der Speicherverbrauch immer weiter an. Vor vielen Jahren, als der wöchentliche Neustart noch nicht per Skript durchgeführt wurde, war das auch so. Ich kann mich leider nicht mehr an einen Maximalwert erinnern, vermutlich waren es mehrere Hundert MB; was dann letztlich der Anlass zum Neustart des Dients per Skript war.

Leider gibt's einige Faktoren, die die Untersuchung für mich deutlich erschweren:
  • Ich kann C++ nicht wirklich und auch mit Visual Studio nicht so gut umgehen; ich habe außerdem nur Visual Studio 2008 Express zur Verfügung (neuere Editionen kommen momentan nicht in Frage)
  • aus dem zu Beginn genannten Punkt (Server/Agent-System) wird klar, dass ein Debuggen schwierig ist, weil hier Timeouts zu beachten sind
Ich habe bereits Visual Leak Detector (Version 2.3) installiert und eingebunden, kann aber mit den Ausgaben desselben nicht so wirklich etwas anfangen. Es werden im Call Stack viele Zeilen gelistet, die auf Standardfunktionen wie std::<irgendwas> hindeuten - unwahrscheinlich, dass dort ein Leck ist.

Wie kann ich die Sache angehen? Hilft es, wenn ich sage, um welche Software es geht? Einerseits wäre ich dankbar, wenn mir jemand zur Hand gehen könnte bei der Sache, andererseits möchte ich nicht, dass jemand anders meine Arbeit macht (auch wenn die freiwillig ist).

Grüße
Dalai
  Mit Zitat antworten Zitat