Un verificador rápido y sucio que detecta iteración no determinista, por ejemplo,
std::unordered_map<...> map;
for (auto [k, v] : map) {
...
}
std::map<Something *, ...> map;
for (auto [k, v] : map) {
...
}
Las advertencias se informan solo si las funciones con nombres predefinidos (por ejemplo, printf ) se encuentran en un bucle.
La poiniteración de CSA no informa la iteración no determinista ni sobre los contenedores ordenados de punteros, ni sobre los contenedores desordenados de los no pientes.
Para construir, instalar (en Debian/Ubuntu) llvm , libclang-dev y libpcre3-dev :
$ sudo apt-get install llvm libclang-dev libpcre3-dev
y correr
$ make clean all
Para construir versiones depuradas o desinfectadas se make con DEBUG=1 , ASAN=1 o UBSAN=1 .
Ejecute bin/find-flaky en archivos que le interesa:
$ bin/find-flaky tests/3-unordered-map-notok.cc
find-flaky: warning: calling IO function 'printf' inside flaky loop
Por defecto, la herramienta busca funciones IO más comunes (como printf ) pero usted proporciona sus propios patrones:
$ cat patterns.txt
# A useful comment
my_debug_fun
# Another one
other_fun
$ bin/find-flaky --patterns patterns.txt ...
Los indicadores de compilación personalizados (generalmente -D y -I ) se pueden suministrar con el parámetro --cflags y la verbosidad se pueden configurar con el indicador -v . Para opciones adicionales, ejecute bin/find-flaky -h .
Construir y luego correr
$ make test
Found no errors