مدقق سريع وقذر يكتشف التكرار غير المحدد على سبيل المثال
std::unordered_map<...> map;
for (auto [k, v] : map) {
...
}
std::map<Something *, ...> map;
for (auto [k, v] : map) {
...
}
لا يتم الإبلاغ عن التحذيرات إلا إذا تمت مواجهة وظائف ذات أسماء محددة مسبقًا (مثل printf ) في حلقة.
لا يبلغ مؤشر CSA التكرار غير المحدد لا على حاويات مرتبة من المؤشرات ، ولا على الحاويات غير المرتبة من غير الرميات.
للبناء ، قم بتثبيت (على Debian/Ubuntu) llvm و libclang-dev و libpcre3-dev :
$ sudo apt-get install llvm libclang-dev libpcre3-dev
وركض
$ make clean all
لبناء تصحيح الأخطاء أو الإصدارات المرمى make مع DEBUG=1 ، ASAN=1 أو UBSAN=1 .
قم بتشغيل bin/find-flaky على الملفات التي تهتم بها:
$ bin/find-flaky tests/3-unordered-map-notok.cc
find-flaky: warning: calling IO function 'printf' inside flaky loop
يبحث الأداة الافتراضية بشكل افتراضي عن وظائف IO الأكثر شيوعًا (مثل printf ) ولكنك توفر أنماطك الخاصة:
$ cat patterns.txt
# A useful comment
my_debug_fun
# Another one
other_fun
$ bin/find-flaky --patterns patterns.txt ...
يمكن تزويد أعلام الترجمة المخصصة (عادة -D و -I ) باستخدام المعلمة --cflags ويمكن ضبطها باستخدام علامة -v . للحصول على خيارات إضافية قم بتشغيل bin/find-flaky -h .
بناء ثم الجري
$ make test
Found no errors