FlakyIterators
1.0.0
快速而骯髒的檢查器,可檢測非確定性迭代
std::unordered_map<...> map;
for (auto [k, v] : map) {
...
}
std::map<Something *, ...> map;
for (auto [k, v] : map) {
...
}
僅在循環中遇到具有預定義名稱(例如printf )功能的功能時,才報告警告。
CSA的Pointeritation並未報告指針有序容器,也不是未訂購的非計算機容器。
要構建,請安裝(在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 ...
可以使用-v flag設置自定義編譯標誌(通常-D和-I ) --cflags flags參數和詳細信息。有關其他選項,運行bin/find-flaky -h 。
構建然後運行
$ make test
Found no errors