c10ddaef4a
The function `iteritems()` of `dict`s is deprecated. The recommended alternative is to use `items()`, this function also works with Python 2. The next issue is that lambdas can no longer unpack tuple parameters in Python 3. It would be possible to use some workaround and still use a lambda, but using `operator.itemgetter(1)` instead is faster and the recommended method in such a case. The syntax is now compatible with Python 2 and 3 but the server script still does not work with Python 3. For example `socket.recv()` returns `bytes` in Python 3 and `str` in Python 2. Currently `str` is expected so it does not work with Python 3. |
||
---|---|---|
.. | ||
test | ||
triage | ||
ci.py | ||
clang-ast.cpp | ||
compare-ast-clang-and-cppcheck.py | ||
compare.cs | ||
daca-test-patch.sh | ||
daca2-download.py | ||
daca2-getpackages.py | ||
daca2-logs2git.sh | ||
daca2-report.py | ||
dmake.cpp | ||
dmake.sln | ||
dmake.vcxproj | ||
donate-cpu-server.py | ||
donate-cpu.py | ||
extract_and_run_more_tests.sh | ||
extracttests.py | ||
generate_and_run_more_tests.sh | ||
generate_cfg_tests.cpp | ||
git-pre-commit-cppcheck | ||
listErrorsWithoutCWE.py | ||
matchcompiler.py | ||
parse-glibc.py | ||
pr.py | ||
readme.md | ||
reduce.cpp | ||
reduce.py | ||
run-coverity.sh | ||
run_more_tests.sh | ||
test_matchcompiler.py | ||
test_showtimetop5.sh | ||
testrunnerify_code.sh | ||
times-tags.sh | ||
times-vs.py | ||
times.c | ||
times.sh | ||
trac-keywords.py |
readme.md
Cppcheck developer and build tools
* tools/matchcompiler.py
The matchcompiler.py is a build script that performs a few code transformations to .cpp files under the lib directory. These transformations are related to the use of Token::Match()
function and are intended to improve code performance. The transformed files are saved on the build directory. This tool is silently used when building the code with SRCDIR=build
, that is:
$ cd path/to/cppcheck
$ make SRCDIR=build
Here is a simple example of the matchcompiler.py optimization. Suppose there is a file example.cpp under lib/:
// lib/example.cpp
void f1() {
Token::Match(tok, "abc");
}
void f2() {
const char *abc = "abc";
Token::Match(tok, abc);
}
If you manually run matchcompiler.py from the main directory:
$ cd path/to/cppcheck
$ python tools/matchcompiler.py
A file example.cpp will be generated on the build directory:
// build/example.cpp
#include "token.h"
#include "errorlogger.h"
#include <string>
#include <cstring>
static const std::string matchStr1("abc");
// pattern: abc
static bool match1(const Token* tok) {
if (!tok || !(tok->str()==matchStr1)/* abc */)
return false;
return true;
}
void f1() {
match1(tok);
}
void f2() {
const char *abc = "abc";
Token::Match(tok, abc);
}
From this we can see that the usage of Token::Match()
in f1()
has been optimized, whereas the one in f2()
couldn't be optimized (the string wasn't inline on the Token::Match()
call). The developer doesn't need to use this tool during development but should be aware of these optimizations. Building with this optimization, cppcheck can get a boost of 2x of speed-up.
* tools/dmake.cpp
Automatically generates the main Makefile
for Cppcheck (the main Makefile
should not be modified manually). To build and run the dmake
tool execute:
$ cd path/to/cppcheck
$ make dmake
$ ./dmake
* tools/reduce.cpp
Cppcheck tool that reduces code for a hang/false positive. To build the tool run:
$ cd path/to/cppcheck
$ make reduce
* tools/times.sh
Script to generate a times.log
file that contains timing information of the last 20 revisions.