Sanitizer per C++



Di seguito è riportato l’elenco consigliato di sanitizer utili, portabili, facili da integrare e utilizzabili su più distribuzioni.

Altri sanitizer come integer, memory, HWASan non sono stati inclusi perché meno utili o perché la loro implementazione potrebbe non essere supportata o fornire risultati diversi a seconda della distribuzione, del compilatore, ecc.

address: ASan — AddressSanitizer (-fsanitize=address)

Scopo: rileva errori di sicurezza della memoria a runtime.

Uso tipico: «individuare rapidamente crash e corruzione della memoria».

Problemi tipici rilevati

Come funziona (concettualmente)

Avvertenze


thread: TSan — ThreadSanitizer (-fsanitize=thread)

Rileva data race e altri problemi di concorrenza:

Uso tipico: «verificare la sicurezza rispetto agli accessi concorrenti dei thread». Nota: di solito viene eseguito in una build separata da quella con ASan.

Scopo: rileva data race e alcuni altri errori di concorrenza.

Problemi tipici rilevati

Come funziona

Avvertenze


undefined UBSan — UndefinedBehaviorSanitizer (-fsanitize=undefined più controlli specifici)

Rileva comportamenti indefiniti in C/C++:

Uso tipico: «rilevare comportamenti indefiniti (UB) che potrebbero non causare crash ma sono comunque errati».

Scopo: rileva comportamenti indefiniti a runtime (violazioni delle regole del linguaggio/ABI).

Problemi tipici rilevati (esempi)

Come funziona

Avvertenze


leak LSan — LeakSanitizer (-fsanitize=leak o rilevamento delle perdite di memoria di ASan)

Rileva perdite di memoria (allocazioni non liberate che diventano irraggiungibili al termine del programma).

Uso tipico: «evitare che servizi/test di lunga durata accumulino perdite di memoria senza segnalarle». Spesso viene usato come parte di ASan su Linux.

Scopo: rileva perdite di memoria (oggetti allocati ma non raggiungibili al termine del programma).

Problemi tipici rilevati

Come funziona

Avvertenze