Ein schneller und schmutziger Checker, der nicht deterministische Iteration z.
std::unordered_map<...> map;
for (auto [k, v] : map) {
...
}
std::map<Something *, ...> map;
for (auto [k, v] : map) {
...
}
Warnungen werden nur gemeldet, wenn Funktionen mit vordefinierten Namen (z. B. printf ) in einer Schleife auftreten.
Die Zeigerung von CSA meldet weder nicht deterministische Iteration nicht über geordnete Behälter von Zeigern noch über nicht ordnungsgemäße Behälter von Nichtbekundungen.
Zu bauen, zu installieren (auf Debian/Ubuntu) llvm , libclang-dev und libpcre3-dev :
$ sudo apt-get install llvm libclang-dev libpcre3-dev
und rennen
$ make clean all
Um Debug- oder Desinfektionsversionen zu bauen, make Make Make Make make DEBUG=1 , ASAN=1 oder UBSAN=1 .
Führen Sie bin/find-flaky in Dateien aus, an denen Sie interessiert sind:
$ bin/find-flaky tests/3-unordered-map-notok.cc
find-flaky: warning: calling IO function 'printf' inside flaky loop
Standardmäßig sucht Tool nach den häufigsten IO -Funktionen (wie printf ), aber Sie bieten Ihre eigenen Muster an:
$ cat patterns.txt
# A useful comment
my_debug_fun
# Another one
other_fun
$ bin/find-flaky --patterns patterns.txt ...
Benutzerdefinierte Kompilierungsflags (normalerweise -D und -I ) können mit dem Parameter --cflags geliefert werden, und Ausführlichkeit kann mit -v -Flag eingestellt werden. Für zusätzliche Optionen führen Sie bin/find-flaky -h aus.
Bauen und dann laufen
$ make test
Found no errors