Date: prev next · Thread: first prev next last
2018 Archives by date, by thread · List index


The weekly updates:
http://document-foundation-mail-archive.969070.n3.nabble.com/CppCheck-Report-Update-td4241678.html

Reports ~7000 Errors, nearly all of which are false positives. By adding  the `--check-config` 
parameter to analyze includes, I discovered that cppcheck cannot find any of our header files. 

Headers can be included 2 ways

1) -I include/ 
Adding this parameter alone, eliminates ~ 1 thousand false positives, but it leaves out all of the 
headers in inc/

2)  --includes-file=inc.txt
with this inc.txt file: https://pastebin.com/qGfPRBJ6

Teaching cppcheck about all of our header locations drops the number off errors found from 7K to a 
few hundred. However it also creats 2 new problems: speed and ~10K "toomanyconfigs" warnings.

An example of 2 configurations defined by A is this:
#ifdef A
    x = y;
#else
    x = z;
#endif
By default cppcheck will check all preprocessor configurations (except those that have #error in 
them). So the above code will be analyzed both when A is defined and when it is not

We can speed things up by not checking our DEBUG configurations. We can also eliminate even more 
false positives by not checking configurations that are missing the system header files. For 
example on Linux, we should add -U_WIN32 to not check Windows configs.

Here is the result of my tweaking:
$ cppcheck -U_WIN32 -i external/ -i workdir/ --includes-file=inc.txt --xml 
--suppressions-list=cppcheck_supp.txt --enable=all --max-configs=100  ./  2> ./err.xml

This command is not perfect, but it greatly improved the signal-to-noise ratio, only showing a few 
hundred errors. The run time went from about 1 hour to 8, but I'm sure that can be by further by 
reducing the number of configurations checked (-D and -U).

All of these commands are explained in detail on the cppcheck manual: 
http://cppcheck.sourceforge.net/manual.pdf


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.