www.mikrocontroller.net

Forum: PC-Programmierung Speicherreservierung überwachen


Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Markus E. (engelmarkus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 
:) .

Autor: Markus E. (engelmarkus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal eine kleine Ausgabe:
# starting Sun Aug 29 01:23:02 2010
# memory overrun protection of 4 Bytes
# initializing new memory with 0xAA
# sweeping deleted memory with 0xEE
# aborts on OVERWRITE_MEMORY 
# internal buffer now 256
S   0x400d0c   0x400d27  # new[] but delete normal ; size 4
O   0x400d0c   0x400d27  # memory overwritten beyond allocated 4 bytes
# 4 byte beyond area:
# 78 bb cc dd 
# abort; DUMP of current state
LeakTracer aborting program
# LeakReport
# from new @ |      size  # Pointer Addr
L   0x400cfe          40  # 0x22390b0
# total allocation requests:      2 ; max. mem used 0 kBytes
# leak     40 Bytes  :-(
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.

Autor: Christoph Lauer (clauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kennst Du Smart-Pointer ? Die Boost Bibliothek hat die z.B. dabei...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.