Pemeriksa cepat dan kotor yang mendeteksi iterasi non-deterministik misalnya
std::unordered_map<...> map;
for (auto [k, v] : map) {
...
}
std::map<Something *, ...> map;
for (auto [k, v] : map) {
...
}
Peringatan dilaporkan hanya jika fungsi dengan nama yang telah ditentukan (misalnya printf ) ditemui dalam satu loop.
Pointeriterasi CSA tidak melaporkan iterasi nondeterministik baik tidak terlalu memesan wadah pointer, atau lebih dari wadah non-pointer yang tidak tertib.
Untuk membangun, menginstal (di debian/ubuntu) llvm , libclang-dev dan libpcre3-dev :
$ sudo apt-get install llvm libclang-dev libpcre3-dev
dan lari
$ make clean all
Untuk membangun debug atau versi sanitasi make dengan DEBUG=1 , ASAN=1 atau UBSAN=1 .
Jalankan bin/find-flaky pada file yang Anda minati:
$ bin/find-flaky tests/3-unordered-map-notok.cc
find-flaky: warning: calling IO function 'printf' inside flaky loop
Secara default alat mencari fungsi IO yang paling umum (seperti printf ) tetapi Anda memberikan pola Anda sendiri:
$ cat patterns.txt
# A useful comment
my_debug_fun
# Another one
other_fun
$ bin/find-flaky --patterns patterns.txt ...
Bendera kompilasi khusus (biasanya -D dan -I ) dapat disediakan dengan parameter --cflags dan verbositas dapat diatur dengan bendera -v . Untuk opsi tambahan jalankan bin/find-flaky -h .
Bangun dan Lalu Jalankan
$ make test
Found no errors