Maison > Article > développement back-end > Comment utiliser ThreadSanitizer pour déboguer les erreurs multi-thread C++ ?
ThreadSanitizer (TSan) détecte les erreurs multithread pendant l'exécution du code C++, comme suit : Compilez le code : clang++ -fsanitize=thread ...Ajoutez un indicateur de lien : -ltsanTSan détectera les conditions de concurrence critique et les courses de données, et imprimera des messages d'erreur. S'il y a une erreur de course aux données dans le code, TSan imprimera un message similaire à « course aux données ».
Comment utiliser ThreadSanitizer pour déboguer les erreurs multi-threading C++
Introduction
ThreadSanitizer (TSan) est un outil d'analyse dynamique utilisé pour détecter les erreurs multi-threading dans le code C++. Contrairement à d'autres outils de débogage, il peut détecter ces erreurs pendant l'exécution réelle, et pas seulement lors d'une analyse statique.
Installez Tsan
Pour utiliser Tsan dans votre projet, suivez ces étapes :
clang++ -fsanitize=thread ...
-ltsan
Usage
TSan insère automatiquement un code de vérification pour détecter les conditions de concurrence et les courses de données. S'il détecte une erreur, il imprime un message et quitte le programme.
Voici quelques messages d'erreur TSan courants :
Cas réel
Considérez le code suivant, qui contient une erreur de course aux données :
#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(); } }
Compilez et exécutez ce code, TSan détectera l'erreur de course aux données et imprimera un message similaire au suivant :
==3677061== ThreadSanitizer: data race on write to size 4 at 0x7ffc48162990 in thread T1 ... ==3677061== ThreadSanitizer: data race on write to size 4 at 0x7ffc481629d0 in thread T3
Conclusion
ThreadSanitizer est un outil puissant pour déboguer les erreurs multi-thread C++. Il détecte ces erreurs lors de son exécution, accélérant ainsi le processus de développement et garantissant la robustesse du code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!