FlakyIterators
1.0.0
비 결정적 반복을 감지하는 빠르고 더러운 체커
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
디버그 또는 위생 버전을 빌드하려면 DEBUG=1 , ASAN=1 또는 UBSAN=1 사용하여 make 실행합니다.
관심있는 파일에서 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