ThreadSanitizer (TSan) mengesan ralat berbilang benang semasa kod C++ sedang berjalan, seperti berikut: Susun kod: clang++ -fsanitize=thread ...Tambah bendera pautan: -ltsanTSan akan mengesan keadaan perlumbaan dan perlumbaan data, dan mencetak mesej ralat. Jika terdapat ralat perlumbaan data dalam kod, TSan akan mencetak mesej yang serupa dengan "perlumbaan data". . Tidak seperti alat penyahpepijatan yang lain, ia boleh mengesan ralat ini semasa masa jalan sebenar, bukan hanya analisis statik.
Pasang TSan
Untuk menggunakan TSan dalam projek anda, ikuti langkah berikut:
Kompilkan kod anda menggunakan:
clang++ -fsanitize=thread ...
Tambahkan bendera berikut pada arahan pautan:
rreee TSan secara automatik memasukkan kod semakan untuk mengesan keadaan perlumbaan dan perlumbaan data. Jika ia mengesan ralat, ia mencetak mesej dan keluar dari program.
Berikut ialah beberapa mesej ralat TSan biasa:Real Case
Pertimbangkan kod berikut, yang mempunyai ralat perlumbaan data:-ltsan
#include <thread> #include <vector> std::vector<int> v; void thread_function(int num) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); v.push_back(num); } int main() { std::vector<std::thread> threads; for (int i = 0; i < 10; i++) { threads.push_back(std::thread(thread_function, i)); } for (auto& t : threads) { t.join(); } }
Atas ialah kandungan terperinci Bagaimana untuk menggunakan ThreadSanitizer untuk menyahpepijat ralat berbilang benang C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!