FAQ:

How do i use DMalloc?

Answer:

  1. dmalloc installieren [zb im Home-Verzeichis]
  2. im Source Code des Programms inkludieren.
    #include "dmalloc.h"
    ACHTUNG! Muss an letzter Stelle der include Liste mit Gaensefuesschen stehen
  3. beim Kompilieren muessen folgende Optionen angegeben werden.
    -object-files:
    gcc -c -I/home/jochen/dmalloc/include tbdl.c -o tbdl.o,
    -linker: Pfad und -ldmalloc damit die library tatsaechlich gelinkt wirdzb:
    gcc -o tbdl -lm -ll -ly -L/home/jochen/dmalloc/lib $(OBJECTS) -ldmalloc"
    ACHTUNG! -ldmalloc muss am ende stehen!
  4. ulimit auf unlimited setzen: ulimit -c unlimited
  5. DMALLOC_OPTIONS setzen
    export DMALLOC_OPTIONS="debug=0x14e40583,inter=100,log=dmalloc.log"
  6. zu testendes programm aufrufen.
  7. in dmalloc.log stehen nicht 'befreite Speicher-Zellen' mit dazugehoerigen stack-adressen zb:
    1004634525:1568:not freed: '0x807a8|s1' (12 bytes) from 'ra=0x190c0' 
  8. eine stack adresse heraussuchen zb "addr=0x807a8|s1" und mit Hilfe des gdb den stack-frame anzeigen.
  9. dmalloc options erneut setzen, und zwar so, dass dmalloc genau an der stelle aus schritt 7 einen core-dump erzeugt, dh einen momentaufnahme des vom programm belegten speichers. zb:
    export DMALLOC_OPTIONS='debug=0x14e40583,inter=100,log=dmalloc.log,addr=0x807a8:1'
    ACHTUNG! aus "addr=0x807a8|s1" wird "addr=0x807a8:1"
  10. programm erneut starten.
  11. mit gdb core-file und programm oeffnen. zb: gdb ./tbdl core
  12. mit 'where' oder 'bt' den stack- frame anzeigen lassen.

das perl-programm memdebug.pl aus dem cdg-cvs-repositum automatisiert die schritte 5 bis 12. Aufruf:
memdebug.pl 'programm-aufruf' <expliziter Pfad zum programm> > memdebug.log
zb:
memdebug.pl './tbdl -c train -d D M ../Corpus/mini.tt' $HOME/Path/To/Me/tbdl > memdebug.log
In der Datei memdebug.log stehen anschliessend die stackframes der Stellen an denen Speicher alloziert wurde, jedoch nicht wieder freigegeben wurde.

Back to: CodingFAQ

-- JochenHagenstroem - 01 Nov 2001
Warning: Can't find topic Support.WebLeftBarExample

 
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback