15.5.2.5. ΠΡΡΠ³ΠΈΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΈ malloc
ΠΠ²Π΅ ΡΡΠ°ΡΡΠΈ Cal Ericson Π² Linux Journal ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ
mtracedmallocΠΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΡ ΠΎΠ΄Π½Ρ ΠΏΠΎ ΠΏΡΠΈΡΠΎΠ΄Π΅ Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ ΡΠ°Π½Π΅Π΅.
ccmallocΠΠ°ΠΌΠ΅ΡΠ°ΡΡΠ°Ρ
malloc()http://www.inf.ethz.ch/personal/biere/projects/ccmallocmallocΠ‘ΡΠ°ΡΠΈΠ½Π½Π°Ρ, Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΡ
malloc()ftp://ftp.cs.toronto.edu/pub/moraes/malloc-1.18.tar.gzmpatrolΠΠ°ΠΊΠ΅Ρ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π‘ΠΌ
http://www.cbmamiga.demon.ΡΠΎ.uk/mpatrolmemwatchΠΠ°ΠΊΠ΅Ρ, ΡΡΠ΅Π±ΡΡΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΎΠΏΡΠΈΠΉ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π‘ΠΌ.
http://www.linkdata.se/sourcecode.htmlnjamdΒ«ΠΠ΅ ΠΏΡΠΎΡΡΠΎ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ mallocΒ» (Not Just Another Malloc Debugger). ΠΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ; Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ
LD_PRELOADhttp://sourceforge.net/projects/njamdyamdΠΠΎΡ ΠΎΠΆ Π½Π° Electric Fence, Π½ΠΎ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΎΠΏΡΠΈΡΠΌΠΈ. Π‘ΠΌ.
http://www3.hmc.edu/~neldredge/yamdΠΠΎΡΡΠΈ Π²ΡΠ΅ ΠΈΠ· ΡΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π»Ρ ΡΠΎΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ. Π ΡΠ°Π±Π»ΠΈΡΠ΅ 15.1 Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΠ°ΡΠ΅ΠΉ ΠΈΠ· Linux Journal ΡΠ΄Π΅Π»Π°Π½Π° ΡΠ²ΠΎΠ΄ΠΊΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ².
Π’Π°Π±Π»ΠΈΡΠ° 15.1. Π‘Π²ΠΎΠ΄ΠΊΠ° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ
| ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ | ΠΠ‘ | ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» | ΠΠΎΠ΄ΡΠ»Ρ/ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° | ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ |
|---|---|---|---|---|
ccmalloc | ΠΠ½ΠΎΠ³ΠΎΡΠΈΠΏΠ½Π°Ρ | ΠΠ΅Ρ | ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° | ΠΠ΅Ρ |
dmalloc | ΠΠ½ΠΎΠ³ΠΎΡΠΈΠΏΠ½Π°Ρ | ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ | ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° | ΠΠ° |
efence | ΠΠ½ΠΎΠ³ΠΎΡΠΈΠΏΠ½Π°Ρ | ΠΠ΅Ρ | ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° | ΠΠ΅Ρ |
memwatch | ΠΠ½ΠΎΠ³ΠΎΡΠΈΠΏΠ½Π°Ρ | ΠΠ° | ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° | ΠΠ΅Ρ |
Moraes | ΠΠ½ΠΎΠ³ΠΎΡΠΈΠΏΠ½Π°Ρ | ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ | ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° | ΠΠ΅Ρ |
mpatrol | ΠΠ½ΠΎΠ³ΠΎΡΠΈΠΏΠ½Π°Ρ | ΠΠ΅Ρ | ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° | ΠΠ° |
mtrace | Linux (GLIBC) | ΠΠ° | ΠΠΎΠ΄ΡΠ»Ρ | ΠΠ΅Ρ |
njamd | ΠΠ½ΠΎΠ³ΠΎΡΠΈΠΏΠ½Π°Ρ | ΠΠ΅Ρ | ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° | ΠΠ΅Ρ |
valgrind | Linux (GLIBC) | ΠΠ΅Ρ | ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° | ΠΠ° |
yamd | Linux, DJGPP | ΠΠ΅Ρ | ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° | ΠΠ΅Ρ |
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΡΠ΄ Π²ΡΠ±ΠΎΡΠΎΠ². ΠΠ° ΡΠΈΡΡΠ΅ΠΌΠ°Ρ GNU/Linux ΠΈ BSD ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ· ΡΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ, ΡΡΠΎ ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ Π²Π°Ρ ΠΎΡ Ρ Π»ΠΎΠΏΠΎΡ ΠΏΠΎ ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ.
ΠΠΎΠ»Π΅Π·Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎΠ΄ΡΡΠ΄. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,
mtrace15.5.3. Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ
lintΠ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΌ Π‘ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΠΌΠΎΠ³ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΏΠΈΡΠΊΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ; ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠ² Π½Π΅ Π±ΡΠ»ΠΎ. ΠΡΠΎ ΡΠ°ΡΡΠΎ Π²Π΅Π»ΠΎ ΠΊ Π½Π΅ΡΠ»ΠΎΠ²ΠΈΠΌΡΠΌ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ Π²ΡΠ·ΡΠ²Π°ΡΡ Π»ΠΈΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠ»ΠΈ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈΠ»ΠΈ ΠΌΠΎΠ³ Π΄Π°ΠΆΠ΅ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
if (argc < 2)Β fprintf ("usage: %s [ options ] files\n", argv[0]);Β Β /* ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ stderr */ΠΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΡΡΠΎΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²,
fprintf()FILE*ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° V7
lintlintΠ‘ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌ Π‘ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠ² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π²
lintextern int some_func(); /* Π‘ΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ */