Valgrind použitie
Ukážka
Majme nasledovný ukážkový main súbor, obsahujúci jedinú alokáciu pamäte, ktorá nie je uvoľnená, a teda na tomto mieste dochádza k memory leaku.
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("Hello, World!\n");
int *leak = malloc(sizeof(int));
return 0;
}
Súbor main.c skompilujeme (pre potreby tejto ukážky môžeme niektoré flagy vynechať) s pridaným flagom -g, ktorý spôsobí, že výstup z Valgrindu bude čitateľnejší.
Výslednú skompilovanú binárku main spustíme pod Valgrindom s flagmi --leak-check=full --show-reachable=yes
V prípade, že by spustená binárka potrebovala k spusteniu ďaľšie argumenty, tieto argumenty budú umiestnené za ./main
gcc -std=c99 -g -o main main.c
valgrind --leak-check=full --show-reachable=yes ./main
Vo výstupe z valgrindu môžeme vidieť:
Hello, World! hovorí, aký bol output spustenej binárky main,
in use at exit: 4 bytes in 1 blocks hovorí, že sme neuvoľnili všetkú alokovanú pamäť,
4 bytes in 1 blocks are definitely lost in loss record 1 of 1 spolu s by 0x400581: main (main.c:7) nám následne hovorí, kde alokácia nastala. V našom prípade ide práve o alokáciu premennej leak.
==18901== Memcheck, a memory error detector
==18901== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==18901== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==18901== Command: ./main
==18901==
Hello, World!
==18901==
==18901== HEAP SUMMARY:
==18901== in use at exit: 4 bytes in 1 blocks
==18901== total heap usage: 2 allocs, 1 frees, 1,028 bytes allocated
==18901==
==18901== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1
==18901== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==18901== by 0x400581: main (main.c:7)
==18901==
==18901== LEAK SUMMARY:
==18901== definitely lost: 4 bytes in 1 blocks
==18901== indirectly lost: 0 bytes in 0 blocks
==18901== possibly lost: 0 bytes in 0 blocks
==18901== still reachable: 0 bytes in 0 blocks
==18901== suppressed: 0 bytes in 0 blocks
==18901==
==18901== For counts of detected and suppressed errors, rerun with: -v
==18901== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Kam ďalej
Po vytvorení programu a odchytení všetkých chýb, je žiadúce aby ste daný kód aj zdokumentovali. Pokračujte tutoriálom na dokumentovací nástroj Doxygen.