Hi, das Projekt an dem Ich arbeite ist mittlerweile so weit vorrangeschritten, das ich nichtmehr sicher sagen kann, ob der Speicher der reserviert wird auch immer sicher wieder freigegeben wird. Wollte daher den new-Operator überladen, sowie delete-Operator überladen, um dadurch jedes mal was in ein Logfile zu schreiben. Blöderweise lässt sich der new-Operator nur für einzelne Typen überladen, nicht aber für alles und jedes. Hatte eigentlich gehofft, das mit einem Template lösen zu können, VC++ sagt darauf hin aber nur, das new keine Funktion ist, was ja auch stimmt. Kennt da wer eine Möglichkeit wie ich relativ einfach zu meiner Überwachungsfunktion komme oder doch noch new überladen kann?
http://www.andreasen.org/LeakTracer/ Schau dir das mal an, das sollte man relativ leicht anpassen können. Es wird einfach eine Objekt-Datei mitgelinkt, und am Ende dann ein Log geschrieben. Das könntest du ja stattdessen über den UART oder so ausgeben lassen. Das ganze THREAD_SAVE-Zeug kannst du rauswerfen, und das fprintf musst du natürlich noch ersetzen. Im Moment ist die Objekt-Datei 33 kb groß, aber das sollte in den Griff zu kriegen sein. Eigentlich nicht schlecht, was er in 500 Zeilen Code untergebracht hat :) .
Hier mal eine kleine Ausgabe:
1 | # starting Sun Aug 29 01:23:02 2010 |
2 | # memory overrun protection of 4 Bytes |
3 | # initializing new memory with 0xAA |
4 | # sweeping deleted memory with 0xEE |
5 | # aborts on OVERWRITE_MEMORY |
6 | # internal buffer now 256 |
7 | S 0x400d0c 0x400d27 # new[] but delete normal ; size 4 |
8 | O 0x400d0c 0x400d27 # memory overwritten beyond allocated 4 bytes |
9 | # 4 byte beyond area: |
10 | # 78 bb cc dd |
11 | # abort; DUMP of current state |
12 | LeakTracer aborting program |
13 | # LeakReport |
14 | # from new @ | size # Pointer Addr |
15 | L 0x400cfe 40 # 0x22390b0 |
16 | # total allocation requests: 2 ; max. mem used 0 kBytes |
17 | # leak 40 Bytes :-( |
18 | Aborted |
Er arbeitet so, dass er die Operatoren new, delete, new[] und delete[] global überschreibt und auf seine eigenen Funktionen umbiegt. Dort führt er Buch über die Aufrufe und benutzt intern malloc und free zum Reservieren.
Kennst Du Smart-Pointer ? Die Boost Bibliothek hat die z.B. dabei...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.