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