176 lines
3.9 KiB
Markdown
176 lines
3.9 KiB
Markdown
# Reformatting the text output
|
|
|
|
If you want to reformat the output so it looks different you can use templates.
|
|
|
|
## Predefined output formats
|
|
|
|
To get Visual Studio compatible output you can use --template=vs:
|
|
|
|
cppcheck --template=vs samples/arrayIndexOutOfBounds/bad.c
|
|
|
|
This output will look like this:
|
|
|
|
Checking samples/arrayIndexOutOfBounds/bad.c ...
|
|
samples/arrayIndexOutOfBounds/bad.c(6): error: Array 'a[2]' accessed at index 2, which is out of bounds.
|
|
|
|
To get gcc compatible output you can use --template=gcc:
|
|
|
|
cppcheck --template=gcc samples/arrayIndexOutOfBounds/bad.c
|
|
|
|
The output will look like this:
|
|
|
|
Checking samples/arrayIndexOutOfBounds/bad.c ...
|
|
samples/arrayIndexOutOfBounds/bad.c:6:6: warning: Array 'a[2]' accessed at index 2, which is out of bounds. [arrayIndexOutOfBounds]
|
|
a[2] = 0;
|
|
^
|
|
|
|
## User defined output format (single line)
|
|
|
|
You can write your own pattern. For instance, to get warning messages that are formatted like old gcc such format can be used:
|
|
|
|
cppcheck --template="{file}:{line}: {severity}: {message}" samples/arrayIndexOutOfBounds/bad.c
|
|
|
|
The output will look like this:
|
|
|
|
Checking samples/arrayIndexOutOfBounds/bad.c ...
|
|
samples/arrayIndexOutOfBounds/bad.c:6: error: Array 'a[2]' accessed at index 2, which is out of bounds.
|
|
|
|
A comma separated format:
|
|
|
|
cppcheck --template="{file},{line},{severity},{id},{message}" samples/arrayIndexOutOfBounds/bad.c
|
|
|
|
The output will look like this:
|
|
|
|
Checking samples/arrayIndexOutOfBounds/bad.c ...
|
|
samples/arrayIndexOutOfBounds/bad.c,6,error,arrayIndexOutOfBounds,Array 'a[2]' accessed at index 2, which is out of bounds.
|
|
|
|
## User defined output format (multi line)
|
|
|
|
Many warnings have multiple locations. Example code:
|
|
|
|
void f(int *p)
|
|
{
|
|
*p = 3; // line 3
|
|
}
|
|
|
|
int main()
|
|
{
|
|
int *p = 0; // line 8
|
|
f(p); // line 9
|
|
return 0;
|
|
}
|
|
|
|
There is a possible null pointer dereference at line 3. Cppcheck can show how it came to that conclusion by showing extra location information. You need to use both --template and --template-location at the command line.
|
|
|
|
Example command:
|
|
|
|
cppcheck --template="{file}:{line}: {severity}: {message}\n{code}" --template-location="{file}:{line}: note: {info}\n{code}" multiline.c
|
|
|
|
The output from Cppcheck is:
|
|
|
|
Checking multiline.c ...
|
|
multiline.c:3: warning: Possible null pointer dereference: p
|
|
*p = 3;
|
|
^
|
|
multiline.c:8: note: Assignment 'p=0', assigned value is 0
|
|
int *p = 0;
|
|
^
|
|
multiline.c:9: note: Calling function 'f', 1st argument 'p' value is 0
|
|
f(p);
|
|
^
|
|
multiline.c:3: note: Null pointer dereference
|
|
*p = 3;
|
|
^
|
|
|
|
The first line in the warning is formatted by the --template format.
|
|
|
|
The other lines in the warning are formatted by the --template-location format.
|
|
|
|
### Format specifiers for --template
|
|
|
|
The available specifiers for --template are:
|
|
|
|
**{file}**
|
|
|
|
File name
|
|
|
|
**{line}**
|
|
|
|
Line number
|
|
|
|
**{column}**
|
|
|
|
Column number
|
|
|
|
**{callstack}**
|
|
|
|
Write all locations. Each location is written in [{file}:{line}] format and the locations are separated by ->. For instance it might look like: [multiline.c:8] -> [multiline.c:9] -> [multiline.c:3]
|
|
|
|
**{inconclusive:text}**
|
|
|
|
If warning is inconclusive then the given text is written. The given text can be any arbitrary text that does not contain }. Example: {inconclusive:inconclusive,}
|
|
|
|
**{severity}**
|
|
|
|
error/warning/style/performance/portability/information
|
|
|
|
**{message}**
|
|
|
|
The warning message
|
|
|
|
**{id}**
|
|
|
|
Warning id
|
|
|
|
**{code}**
|
|
|
|
The real code.
|
|
|
|
**\t**
|
|
|
|
Tab
|
|
|
|
**\n**
|
|
|
|
Newline
|
|
|
|
**\r**
|
|
|
|
Carriage return
|
|
|
|
### Format specifiers for --template-location
|
|
|
|
The available specifiers for `--template-location` are:
|
|
|
|
**{file}**
|
|
|
|
File name
|
|
|
|
**{line}**
|
|
|
|
Line number
|
|
|
|
**{column}**
|
|
|
|
Column number
|
|
|
|
**{info}**
|
|
|
|
Information message about current location
|
|
|
|
**{code}**
|
|
|
|
The real code.
|
|
|
|
**\t**
|
|
|
|
Tab
|
|
|
|
**\t**
|
|
|
|
Newline
|
|
|
|
**\r**
|
|
|
|
Carriage return
|