szó jelentését keresi. A DICTIOUS-ban nem csak a
szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a
szót egyes és többes számban mondani. Minden, amit a
szóról tudni kell, itt található. A
szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. A
és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.
Főnév
code sanitizer (tsz. code sanitizers)
- (informatika) A Sanitizer egy olyan eszköz (toolset), amely a C++ programok futtatás közbeni hibáit képes automatikusan észlelni. Ezek nem szintaktikai hibák, hanem memóriahasználati, típuskezelési, párhuzamosítási és egyéb logikai hibák, amelyek gyakran nem okoznak azonnali összeomlást, de undefined behavior-hez vagy adatvesztéshez vezethetnek.
A sanitizerek a fordítóba beépített (pl. GCC, Clang), és -fsanitize
opcióval aktiválható eszközök.
🛠️ Típusai
1. AddressSanitizer (ASan)
- Felfedi a memóriakezelési hibákat:
- heap buffer overflow
- stack buffer overflow
- use-after-free
- use-after-scope
- global buffer overflow
g++ -fsanitize=address -g main.cpp -o prog
Hatás: lassítja a programot (kb. 2x), de kiváló diagnosztikát ad.
2. UndefinedBehaviorSanitizer (UBSan)
- Felismeri a nem definiált viselkedést (undefined behavior):
- null pointer dereferálás
- integer overflow (signed)
- use of uninitialized values
- misaligned pointer access
- type-punned accesses
g++ -fsanitize=undefined -g main.cpp -o prog
Példa:
int x = INT_MAX;
x++; // UBSan: signed integer overflow
3. MemorySanitizer (MSan)
- Figyeli a nem inicializált memória használatát (főleg olvasást).
- Csak Clang-ben működik.
clang++ -fsanitize=memory -g main.cpp -o prog
Lassabb, mint ASan, de pontosabb a nem inicializált hibákra.
4. ThreadSanitizer (TSan)
- Kiszűri a versenyhelyzeteket (data race) és hibás párhuzamos hozzáféréseket.
g++ -fsanitize=thread -g -pthread main.cpp -o prog
Többszálú programoknál aranyat ér. Csak Clang és GCC támogatja.
5. LeakSanitizer (LSan)
- Memóriaszivárgást (leak) keres.
- Része az AddressSanitizer-nek, vagy külön:
g++ -fsanitize=leak -g main.cpp -o prog
🧪 Példaprogram: AddressSanitizer hibát jelez
#include <iostream>
int main() {
int* arr = new int;
arr = 42; // buffer overflow (index 3 túlmegy a 0..2-n)
delete arr;
return 0;
}
g++ -fsanitize=address -g prog.cpp -o prog
./prog
Kimenet:
==1234==ERROR: AddressSanitizer: heap-buffer-overflow on address ...
📦 Több sanitizer egyszerre
g++ -fsanitize=address,undefined -g main.cpp -o prog
Ne keverd memory
és address
/thread
sanitizert egy buildben – nem kompatibilisek.
🔬 Diagnosztikai érték
- Precíz hibahely megadás (sor + változó)
- Stack trace az eseményhez
- Valós idejű hibaüzenet, nem futás végi összeomlás
- Mutatja a pontos memóriacímeket és típusokat
🧯 Mikor használd?
- Fejlesztési fázisban
- Automatikus tesztelésekben (CI/CD)
- Unit tesztek futtatása közben
- Ismeretlen összeomlások kivizsgálására
- Fura viselkedések (random crash, memória bug) elemzésekor
🧰 Használat CMake-ben
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address,undefined -g")
Feltételhez kötött aktiválás:
option(USE_SANITIZER "Enable sanitizers" ON)
if (USE_SANITIZER)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -g")
endif()
🧪 Összehasonlító táblázat
Sanitizer
|
Mit keres?
|
Fordító támogatás
|
Lassulás
|
Platform
|
ASan
|
buffer, use-after-free
|
GCC, Clang
|
2x
|
cross
|
UBSan
|
undefined behavior
|
GCC, Clang
|
minimális
|
cross
|
MSan
|
nem inicializált olvasás
|
Clang
|
3–5x
|
Linux
|
TSan
|
data race
|
GCC, Clang
|
5x+
|
Linux
|
LSan
|
memóriaszivárgás
|
GCC, Clang
|
1.5x
|
Linux, macOS
|
⚠️ Korábban használt alternatívák
- Valgrind: lassabb, de platformfüggetlen (memóriakezelés)
- DrMemory: Windows alternatíva
- Static Analyzer: futás nélkül detektál
🔐 Biztonság és stabilitás
Sanitizerek nem csak hibákat keresnek, hanem:
- Megakadályozhatják exploitokat
- Jelzik, ha a program megsérti a C++ szabványt
- Segítenek a hardening során (pl. ASan + stack protector)
🧭 Hibakeresési stratégia
- Fordítsd újra
-fsanitize=...
opciókkal
- Futtasd a programot → figyeld a stdout/stderr
- Ha crash van → olvasd a stack trace-t
- Javítsd a hibát
- Ismételd a tesztelést
🧠 Végszó
A Sanitizer-ek a modern C++ fejlesztés elengedhetetlen eszközei. Ezek segítségével:
- a rejtett hibák gyorsabban felszínre kerülnek,
- a kód megbízhatósága nő,
- a fejlesztési idő csökken.