C++ Academy · Lekcja

Profilowanie za pomocą perf, VTune i sanitizerów

Profiluj programy za pomocą perf i Intel VTune oraz wykrywaj błędy przy użyciu AddressSanitizer

Lekcja 3 z 415 kroki

Profilowanie za pomocą perf, VTune i sanitizerów to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.

Dlaczego profilować

Intuicja dotycząca wydajności zwykle zawodzi. Wykonaj profilowanie, aby znaleźć rzeczywiste wąskie gardła — a następnie optymalizuj.

Linux: perf

perf to profiler próbkowania o niewielkim narzucie, dostarczany z systemem Linux. Uruchom go na dowolnym pliku binarnym zbudowanym z informacjami debugowania.

g++ -O2 -g main.cpp -o main
perf record ./main
perf report

perf stat

Wyświetla podsumowanie metryk — cykli, instrukcji, chybień cache i błędnych predykcji rozgałęzień — dla jednego uruchomienia.

perf stat -e cycles,instructions,cache-misses,branch-misses ./main

Wykresy płomieniowe

Przekształć dane z perf w wykres płomieniowy pokazujący, gdzie tracony jest czas.

perf record -F 99 -g ./main
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg

macOS: Instruments

Narzędzie Instruments firmy Apple zapewnia profilowanie czasu, analizę alokacji, wycieków pamięci i wiele więcej. Jest bezpłatne wraz z Xcode.

Windows: VTune Profiler

Intel VTune (bezpłatny do użytku osobistego) oferuje szczegółową analizę mikroarchitektury — zatrzymania potoku, chybienia cache i często wykonywane bloki. Działa na wielu platformach.

Sanitizery wykrywają błędy

Sanitizery to kontrolery czasu wykonania wbudowane w clang i gcc. Skompiluj program ponownie z odpowiednią flagą:

  • -fsanitize=address — AddressSanitizer do wykrywania błędów pamięci
  • -fsanitize=thread — ThreadSanitizer do wykrywania wyścigów danych
  • -fsanitize=undefined — UB Sanitizer do wykrywania przepełnień liczb całkowitych ze znakiem i innych problemów
  • -fsanitize=memory — MSan do wykrywania niezainicjalizowanych odczytów

Przykład AddressSanitizer

Wykrywa przepełnienia bufora, użycie po zwolnieniu i podwójne zwolnienie, wyświetlając ślady stosu.

g++ -fsanitize=address -g main.cpp
./a.out
# Output points exactly at the bug

Czas kompilacji a czas wykonania

Analiza statyczna (clang-tidy, cppcheck) znajduje błędy bez uruchamiania programu. Sanitizery znajdują błędy czasu wykonania. Używaj obu — wykrywają różne problemy.

Profilowanie alokacji

Alokacje na stercie są powolne. Użyj perf, massif z Valgrinda lub Heaptrack, aby znaleźć miejsca intensywnych alokacji i ograniczyć ich liczbę.

Odczytywanie profili

Skup się na najważniejszych funkcjach w profilu. Następnie przeanalizuj drzewo wywołań, aby zrozumieć kontekst. Różnice rzędu kilku procent zazwyczaj nie są warte optymalizacji.

Ciągłe profilowanie

W środowisku produkcyjnym profilery oparte na próbkowaniu, takie jak Pyroscope lub Pixie, stale zbierają dane przy niewielkim narzucie. Wykrywaj regresje, zanim zaszkodzą użytkownikom.

Przebieg pracy

Proces optymalizacji:

  1. Wykonaj pomiary, aby znaleźć wąskie gardło
  2. Sformułuj hipotezę
  3. Zmień jedną rzecz
  4. Wykonaj pomiary ponownie

Bez pomiarów zgadujesz.

Szybki test

Jaka flaga kompilatora włącza AddressSanitizer?

Podsumowanie

Profiluj za pomocą perf (Linux), Instruments (macOS) lub VTune (wiele platform), aby znaleźć wąskie gardła. Używaj sanitizerów, aby wcześnie wykrywać błędy pamięci i współbieżności. Mierz, formułuj hipotezę, zmieniaj i mierz ponownie.

Bezpłatny start

Ucz się C++ dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
51
Lekcje
203

Często zadawane pytania

Czy lekcja „Profilowanie za pomocą perf, VTune i sanitizerów” jest bezpłatna?

Tak — pełny tekst „Profilowanie za pomocą perf, VTune i sanitizerów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Profilowanie za pomocą perf, VTune i sanitizerów”?

Profiluj programy za pomocą perf i Intel VTune oraz wykrywaj błędy przy użyciu AddressSanitizer Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C++ Academy?

Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Profilowanie za pomocą perf, VTune i sanitizerów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?

Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Układy danych przyjazne dla pamięci podręcznej
  2. Przewidywanie rozgałęzień i gorące pętle
  3. Profilowanie za pomocą perf, VTune i sanitizerów
  4. Mikrobenchmarking z Google Benchmark
← Powrót do C++ Academy