none (nil) -- no functionality (0)log-stats (lst) -- log general statistics (0x1)log-non-free (lnf) -- log non-freed pointers (0x2)log-known (lkn) -- log only known non-freed (0x4)log-trans (ltr) -- log memory transactions (0x8)log-admin (lad) -- log administrative info (0x20)log-blocks (lbl) -- log blocks when heap-map (0x40)log-bad-space (lbs) -- dump space from bad pnt (0x100)log-nonfree-space (lns) -- dump space from non-freed pointers (0x200)log-elapsed-time (let) -- log elapsed-time for allocated pointer (0x40000)log-current-time (let) -- log current-time for allocated pointer (0x80000)check-fence (cfe) -- check fence-post errors (0x400)check-heap (che) -- check heap adm structs (0x800)check-lists (cli) -- check free lists (0x1000)check-blank (cbl) -- check mem overwritten by alloc-blank, free-blank (0x2000)check-funcs (cfu) -- check functions (0x4000)force-linear (fli) -- force heap space to be linear (0x10000)catch-signals (csi) -- shutdown program on SIGHUP, SIGINT, SIGTERM (0x20000)realloc-copy (rco) -- copy all re-allocations (0x100000)free-blank (fbl) -- overwrite freed memory space with BLANK_CHAR (0x200000)error-abort (eab) -- abort immediately on error (0x400000)alloc-blank (abl) -- overwrite newly alloced memory with BLANK_CHAR (0x800000)heap-check-map (hem) -- log heap-map on heap-check (0x1000000)print-messages (pme) -- write messages to stderr (0x2000000)catch-null (cnu) -- abort if no memory available (0x4000000)never-reuse (nre) -- never re-use freed memory (0x8000000)allow-free-null (afn) -- allow the frees of NULL pointers (0x20000000)error-dump (edu) -- dump core on error and then continue (0x40000000)Π ΡΡΠΎΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Ρ Π²Π°Ρ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
dmallocdmalloc15.5.2.4. Valgrind: ΠΌΠ½ΠΎΠ³ΠΎΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, Π²ΡΠ΅ ΡΠΎΠΊΡΡΠΈΡΡΡΡΡΡ Π½Π° ΠΎΡΠ»Π°Π΄ΠΊΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, ΠΈ ΡΡΠΎ Π² ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΡΡ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡΡ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Valgrind ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ GPL ΠΎΡ Π²Π°ΡΡΠ²Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ ΠΎΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ Valgrind ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ»ΠΈ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ΅ΠΌ ΠΌΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ (ΠΈ ΡΠΎΠΊΡΠ°ΡΠ°ΡΡ) Π΅Π³ΠΎ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ Π²ΠΏΠ΅ΡΠ΅Π΄.
Valgrind ΡΠ²Π»ΡΠ΅ΡΡΡ Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Linux-x86. ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ΄ΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΈΡΠΊΡΡΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ x86, ΠΈ ΡΡΠ΄Π° Β«ΠΎΠ±ΠΎΠ»ΠΎΡΠ΅ΠΊΒ», ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΠΌ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΡΡΡΠΈΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ. ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΌΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ Β«ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈΒ», Π½Π΅ Π½Π°ΡΡΡΠ°Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ.
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Β«ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΎΠΉΒ» ΡΠ²Π»ΡΠ΅ΡΡΡ
memcheckΒ«ΠΠ±ΠΎΠ»ΠΎΡΠΊΠ°Β»
memcheckmalloc/new/free/deletememcheckβ’Β ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
β’Β Π§ΡΠ΅Π½ΠΈΠ΅/Π·Π°ΠΏΠΈΡΡ Π² ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎΡΠ»Π΅ Π΅Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ.
β’Β Π§ΡΠ΅Π½ΠΈΠ΅/Π·Π°ΠΏΠΈΡΡ Π·Π° Π³ΡΠ°Π½ΠΈΡΠ΅ΠΉ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ
mallocβ’Β Π§ΡΠ΅Π½ΠΈΠ΅/Π·Π°ΠΏΠΈΡΡ Π² Π½Π΅Π½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΡΡΠ΅ΠΊΠ°.
β’Β Π£ΡΠ΅ΡΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠ΅
mallocβ’Β ΠΠ΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
malloc/new/new[]free/delete/delete[]β’Β ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ ΡΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ
pthreadsΠΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠΈΠΌ, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΡΡΠ΄Π½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ, ΡΠ°ΡΡΠΎ ΠΎΡΡΠ°ΡΡΠΈΠΌΠΈΡΡ Π½Π΅ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π½ΡΠΌΠΈ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΌΠΈ ΡΠ΅Π΄ΠΊΠΈΠ΅, ΡΡΡΠ΄Π½ΡΠ΅ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΎΡΠΊΠ°Π·Ρ.
ΠΡΡΠ³ΠΈΠ΅ Β«ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈΒ» Π±ΠΎΠ»Π΅Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ:
β’Β
cachegrindβ’Β
addrcheckmemcheckmemcheckΠΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠΎΡΠΎΠ½Π° Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°: ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΡΡΠΈ Π² Π΄Π²Π° ΡΠ°Π·Π° Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Ρ
memcheckβ’Β
helgrindΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΎΡΠΌΠ΅ΡΠ°Π΅Ρ:
Valgrind ΡΠ΅ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½ Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ, Π² ΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π‘. ΠΡΠΎ Π·Π°ΡΡΡΠ΄Π½ΡΠ΅Ρ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ Π½Π° ΡΠΎΠΌ, ΡΡΠΎ ΠΌΡ ΡΡΠΈΡΠ°Π΅ΠΌ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΉΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ: Linux Π½Π° x86. Valgrind ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Unix '
./configuremakemake installΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ GNU/Linux Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Unix, Valgrind Π½Π΅ ΠΎΠΊΠ°ΠΆΠ΅Ρ Π²Π°ΠΌ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠΎΠΌΠΎΡΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΈΡΡΠ΅ΠΌΡ GNU/Linux Π½Π° x86 Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΡΠ½Ρ (ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ), Π²ΠΏΠΎΠ»Π½Π΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΡΠΈ Π΅Π΅ Ρ ΡΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌ Π±ΡΠ΄ΠΆΠ΅ΡΠΎΠΌ, ΠΈΠ»ΠΈ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π·Π°Π½ΡΡΡ Π½Π° Π²ΡΠ΅ΠΌΡ! Π§ΡΠΎ Π΅ΡΠ΅, ΠΊΠΎΠ³Π΄Π° Valgrind Π½Π°ΡΠ΅Π» Π΄Π»Ρ Π²Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΎΠ½Π° ΠΈΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π΄Π»Ρ Π»ΡΠ±ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ°Π·ΡΠΌΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ x86 GNU/Linux Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π° ΠΊΠ°ΠΊΡΡ-Π½ΠΈΠ±ΡΠ΄Ρ Π΄ΡΡΠ³ΡΡ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Unix Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°. [181]