Albert Astals Cid nos presentó esta charla en Akademy-es 2016 de Madrid que KDE España organizó en Medialab Prado. Pinceladas de programación de la mano de un crack.
valgrind y ASAN Dos formas de instrumentar código en busca de errores
1. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Valgrind y ASAN
valgrind y ASAN
Dos formas de instrumentar código en busca de
errores
Albert Astals Cid
2. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Valgrind y ASAN
¿Quien es Albert Astals Cid?
Ingeniero en Informática por la UPC
Traductor en KDE desde 2002
Programador en KDE desde 2003
Mantenedor de KPDF/Okular desde 2004
Miembro de KDE eV desde 2005, actualmente en la Junta Directiva
Miembro fundador de KDE España, ex-presidente
NO SOY UN EXPERTO EN Valgrind o ASAN
3. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Valgrind y ASAN
¿Qué es Valgrind?
Valgrind es un conjunto libre (GPL) de herramientas
para hacer debugging y profiling
Herramientas:
memcheck: detector de errores de memoria
cachegrind: profiler de cache
callgrind: profiler de llamadas
massif: profiler de uso de heap
Helgrind/DRD: debugger de threads
Funciona en
Linux: x86, AMD64, PPC32, PPC64, PPC64LE, S390X, ARM, ARM64, MIPS32, MIPS64
Solaris/illumos: X86, AMD64
Darwin: X86, AMD64
Android: ARM, ARM64, MIPS32, X86
4. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Valgrind y ASAN
Memcheck
Detecta errores de gestión de memoria
Dirigido a programas en C y C++
Intercepta las lecturas y escrituras de memoria y llamadas a
malloc/new/free/delete
Detecta:
Accesos incorrectos a memoria
Usos de variables no inicializadas
Leaks de memoria
free/delete incorrectos
Ejecuta los programas entre 10 y 30 veces más lento
No necesita recompilación
5. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Valgrind y ASAN
¿Como usar Memcheck?
$ valgrind opciones nombreDeMiPrograma
--trace-children=no|yes Valgrind-ise child processes? [no]
--num-callers=<number> show <number> callers in stack traces [12]
--leak-check=no|summary|full search for memory leaks at exit? [summary]
6. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Valgrind y ASAN
¿Que es ASAN?
AddressSanitizer (aka ASAN) es un detector de errores de memoria
para C/C++.
Encuentra:
Use after free (dangling pointer dereference)
Heap buffer overflow
Stack buffer overflow
Global buffer overflow
Use after return
Initialization order bugs
7. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Valgrind y ASAN
¿Que es ASAN? (II)
Es una herramienta rápida. Los programas son en torno a 2 veces
más lentos.
Funciona en x86 Linux/Mac y ARM Android.
Soporta gcc (>=4.8) y clang (>=3.1) (nuevas versiones muy
recomendadas)
Es un proyecto de Google
8. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Valgrind y ASAN
¡Fácil! Vámonos a casa :D
¡Esperad!
Tengo ejemplos
¿Como uso ASAN?
-fsanitize=address -g -fno-omit-frame-pointer
9. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Valgrind y ASAN
¿Cuando usar Memcheck/ASAN?
Cuando quieres debugar un problema
Cuando quieres buscar leaks (valgrind)
Siempre!
Con valgrind es lento pero muchas veces posible
Encuentra errores que no siempre son visibles
10. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Valgrind y ASAN
Ejemplos simples
use_after_free
stack_out_of_bounds
heap_out_of_bounds
uninitialized_value
global_out_of_bounds
mismatched_delete
memory_leaks
11. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Valgrind y ASAN
Comparación
Valgrind es más leeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeento
Valgrind no necesita recompilación
Valgrind continua despues del primer error
Valgrind encuentra memoria sin inicializar (MSAN es menos bueno)
Valgrind no encuentra accesos fuera de pila/globales
12. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Valgrind y ASAN
Preguntas?