tg-me.com/cpp_geek/299
Last Update:
🔥 Ловим баги в C++ на лету с помощью AddressSanitizer (ASan)
Если valgrind
— это медленный, но подробный детектив, то ASan
— это охрана, которая ловит баги прямо во время исполнения. Быстро, точно, удобно.
💡 Что такое ASan?
Это часть компилятора (clang
или gcc
), которая вставляет дополнительные проверки в бинарник. Работает во время запуска, ловит:
- выход за границы массива,
- use-after-free,
- double free,
- утечки памяти (с флагом LeakSanitizer
).
👨💻 Пример:
// asan_example.cpp
#include <iostream>
int main() {
int* arr = new int[5];
arr[10] = 42; // выход за границу
delete[] arr;
return 0;
}
⚙️ Компиляция с ASan:
g++ -fsanitize=address -g asan_example.cpp -o app
🚀 Запуск:
./app
📄 Результат:
==12345==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000000050
READ of size 4 at 0x602000000050 thread T0
#0 0x... in main asan_example.cpp:6
📌 Плюсы ASan:
- Мгновенная обратная связь;
- Прост в использовании;
- Отлично работает с CI (GitHub Actions, GitLab CI и т.д.);
- Поддерживает LeakSanitizer (
-fsanitize=leak
).📉 Минусы:
- Увеличивает размер бинарника;
- Иногда мешает оптимизациям;
- Не ловит всё (например, утечки в сторонних lib без debug info).
🔧 Совет:
Запускай тесты с
-fsanitize=address
в debug-сборках. Это бесплатно и спасает от кучи головной боли в будущем.🧵 Используешь ли ты
ASan
в своих проектах? Или только valgrind
? Пиши в комментах👇➡️ @cpp_geek
BY C++ geek
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/cpp_geek/299