पाठ 38 / 38
Memory Debugging: ASan और Valgrind
अंदाज़ा लगाने के बजाय AddressSanitizer और Valgrind से buffer overflows, leaks और use-after-free bugs पकड़ें।
AddressSanitizer
-fsanitize=address के साथ compile करें और program stack trace सहित out-of-bounds access, use-after-free और leaks बताएगा।
gcc -g -O1 -fsanitize=address,undefined -fno-omit-frame-pointer prog.c -o prog
./prog
# ERROR: AddressSanitizer: heap-buffer-overflow ... at prog.c:12Valgrind
Valgrind बिना बदले binary चलाता है और invalid reads व leaked blocks बताता है, पर यह धीमा है।
gcc -g prog.c -o prog
valgrind --leak-check=full ./progCI में tests को sanitizer के साथ चलाएँ। Sanitizer builds development के लिए हैं, production के लिए नहीं, क्योंकि वे programs को धीमा करते हैं और अधिक memory लेते हैं।