Sanitizers C++



Vous trouverez ci-dessous la liste recommandée des sanitizers utiles, portables, faciles à utiliser et compatibles avec plusieurs distributions.

D’autres sanitizers comme integer, memory ou HWASan n’ont pas été retenus, car ils sont moins utiles ou leur implémentation peut ne pas être prise en charge, ou donner des résultats différents selon les distributions, les compilateurs, etc.

address : ASan — AddressSanitizer (-fsanitize=address)

Objectif : détecter les bugs de sûreté mémoire à l’exécution.

Usage typique : « trouver rapidement les plantages et les corruptions de mémoire. »

Erreurs typiquement détectées

Principe de fonctionnement (conceptuel)

Points d’attention


thread : TSan — ThreadSanitizer (-fsanitize=thread)

Détecte les courses aux données (data races) et d’autres problèmes de concurrence :

Usage typique : « valider la sûreté des accès depuis plusieurs threads. » Remarque : s’exécute généralement dans une version compilée séparément de celle utilisant ASan.

Objectif : détecter les courses aux données (data races) et certains autres bugs de concurrence.

Erreurs typiquement détectées

Principe de fonctionnement

Points d’attention


undefined UBSan — UndefinedBehaviorSanitizer (-fsanitize=undefined et vérifications supplémentaires)

Détecte les comportements indéfinis en C/C++ :

Usage typique : « repérer les comportements indéfinis qui ne provoquent pas forcément de plantage mais sont erronés. »

Objectif : détecter les comportements indéfinis à l’exécution (violations des règles du langage ou de l’ABI).

Erreurs typiquement détectées (exemples)

Principe de fonctionnement

Points d’attention


leak LSan — LeakSanitizer (-fsanitize=leak ou détection de fuites d’ASan)

Détecte les fuites de mémoire (allocations non libérées qui deviennent inaccessibles à la fin du programme).

Usage typique : « éviter les fuites de mémoire silencieuses dans les services ou tests de longue durée. » Souvent utilisé dans le cadre d’ASan sous Linux.

Objectif : détecter les fuites de mémoire (objets alloués mais inaccessibles à la fin du programme).

Erreurs typiquement détectées

Principe de fonctionnement

Points d’attention