Memory leaks eines fremden Programmes beseitigen - Chancen?
-
Wenn ich wüsste, wie ich die leaks finde, könnte ich schon mal weitersehen... Die Hoffnung..ach ihr wisst ja.
@volkard
Jo aber genau das möchte ich verhindern.
-
nachdem du hier im forum danach gefragt hast, kann man daon ausgehen, dass du es nicht innerhalb eines jahres schaffen kannst
-
Flicker2 schrieb:
@volkard
Jo aber genau das möchte ich verhindern.Jo aber genau so wirst du es im Endeffekt machen.
-
Ok, dann nicht.
-
Flicker2 schrieb:
Ok, dann nicht.
Ich hab dir einen Lösungsvorschlag geboten.
-
Wenn die ursprünglichen Entwickler es nicht geschafft haben die MemoryLeaks, trotz Quellcode und guten Debugmöglichkeiten zu beheben, dann wird es für jemand der noch nicht mal, weiß wo er anfangen soll, wohl recht schwierig.
Aber so was wie Valgrind könnte dir helfen. Das funktioniert iirc auch mit Programmen, zu denen du nicht den Quellcode hast (wenn auch nicht so gut).
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Themen rund um den PC in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Die Stelle zu finde wo das Leak ehtsteht sollte nicht SO schwer sein.
Die Stelle zu finden wo man es freigeben sollte zu finden, wird aber vermutlich äusserst schwierig bis nahezu unmöglich werden.
Wenn der Fehler nicht total trivial ist.
-
hustbaer schrieb:
Die Stelle zu finde wo das Leak ehtsteht sollte nicht SO schwer sein.
naja, das problem duerfte doch eher sein etwas als leak zu identifizieren. kann z.b. sein dass irgend ein container intern immer weiter waechst, aber deswegen ist noch lange nicht der ganze container invalid und ihn komplett zu loeschen ist dann sicher _nie_ eine gute idee (z.b. ein vector der nur waechst).
besonders wenn sowas in c#/java geschrieben sein sollte findet man nur schwer etwas.volkards idee ist die gaengiste loesung bei sowas.
-
rapso schrieb:
hustbaer schrieb:
Die Stelle zu finde wo das Leak ehtsteht sollte nicht SO schwer sein.
naja, das problem duerfte doch eher sein etwas als leak zu identifizieren. kann z.b. sein dass irgend ein container intern immer weiter waechst, aber deswegen ist noch lange nicht der ganze container invalid und ihn komplett zu loeschen ist dann sicher _nie_ eine gute idee (z.b. ein vector der nur waechst).
besonders wenn sowas in c#/java geschrieben sein sollte findet man nur schwer etwas.Das ist schon richtig, ja. Ich wollte damit nicht sagen dass es immer einfach ist das Leak zu finden. Eher dass es oft einfach sein ist, es aber noch lange nicht reicht zu wissen wo etwas leakt, damit man es so einfach fixen kann. Vor allem ohne Source.
An C#/Java hab' ich dabei nicht gedacht - da ist es natürlich doppelt schwierig ein Leak zu finden, da es "klassische" Leaks ja garnicht gibt (ausgenommen PInvoke/JNI Sachen). Und im "Leak Fall" meist irgendwelche ewig wachsenden Collections oder selbst gebastelte wuchernde Graphen existieren.
volkards idee ist die gaengiste loesung bei sowas.
Ja, ich hatte ja bereits geschrieben dass das die Lösung ist, bei der er höchstwahrscheinlich landen wird.
-
Irgendwie Speicher finden, der nur kurzzeitig benutzt wird, und dann ewig belegt bleibt?
-
Flicker2 schrieb:
Irgendwie Speicher finden, der nur kurzzeitig benutzt wird, und dann ewig belegt bleibt?
Satz mit allen Bausteinen zusammensetzen dennoch nutzlos sei?
-
;flicky schrieb:
Satz mit allen Bausteinen zusammensetzen dennoch nutzlos sei?
Self-owned?
-
Flicker2 schrieb:
;flicky schrieb:
Satz mit allen Bausteinen zusammensetzen dennoch nutzlos sei?
Self-owned?
Ja. Du.
-
Ich hab' kürzlich sogar mit Source einer Fremdlib aufgesteckt. Zwei Miss-by-ones gefunden, ein free auf 'nen Pointer ins Nirvana, passendes Leak dazu, das Ding crashte immer noch und der Tag war futsch.
Ich hab's dann neu geschrieben. Ohne Source wär' ich nach 'ner Stunde drauf gekommen, von der Lib die Finger zu lassen.
Will damit sagen, rebooten ist der einzige Weg, mit Disasm, reengineering usw. haust Du nur Zeit tot.
-
pointercrash() schrieb:
Will damit sagen, rebooten ist der einzige Weg
Prozess re-starten sollte reichen
-
Irgendwie Speicher finden, der nur kurzzeitig benutzt wird, und dann ewig belegt bleibt?
Was ist daran nicht Deutsch?
"Ich möchte irgendwie Speicher finden, der nur kurzzeitig benutzt wird, und dann ewig belegt bleibt."
So besser? Oder hocke ich schon zu lange zu Hause?
Ok, dann lasse ich es. Es wurde ja nur Valgrind genannt, und das ist nicht für Win32...
-
Ich kenne für Windows ein Tool welches das kann, nämlich BoundsChecker.
Kostet aber mächtig $$$.
UND ich weiss NICHT wie gut das wirklich funktioniert wenn man nichtmal Debug-Symbole für das Programm hat.Ich *schätze* es müsste halbwegs gehen, probiert habe ich es aber noch nie.
p.S.: ich halte das immer noch für eine Schnapsidee, die ausser Zeitverschwendung zu nix führen wird.
-
Flicker2 schrieb:
Irgendwie Speicher finden, der nur kurzzeitig benutzt wird, und dann ewig belegt bleibt?
Was ist daran nicht Deutsch?
darum ging es glaube ich, es ist deutsch und dennoch sinnfrei ohne context.
"Ich möchte irgendwie Speicher finden, der nur kurzzeitig benutzt wird, und dann ewig belegt bleibt."
So besser?
jetzt versteht man dich
ich glaube das stellst du dir zu einfach vor. du suchst nicht nach speicher der nur kurzzeitig benutzt wird, sondern nach speicher der nie wieder benutzt wird. Ohne in den code zu schauen (und zwar den ganzen), kann man das nur anhand der allokationen usw. garnicht wissen.es gibt zwar ein paar experimentelle garbage collectoren fuer c++ die heuristische mittel anwenden, aber entweder sind die sehr weak und loeschen was nicht geloescht werden darf, oder sie sind sehr konservativ und es gammelt viel im ram rum (und trotzdem kann es passieren dass sie speicher loeschen der nicht geloescht werden darf).
@hust
kann man BoundsChecker echt noch im nachinein einimpfen? bisher musste ich dafuer das programm neu bauen.vielleicht koennte man dir helfen wenn du das programm nennen wuerdest (falls es oeffentlich ist). eventuel gibt es nen guten ersatz oder es gibt etwas art typisches was man annehmen koennte.