I cannot recommend it since I haven’t try it out, but you can find many over
here:
https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#C,_C++
Moved to Visual Studio since we already have the license. But this depends on
your needs. Cppcheck work great with GUI but the CLI is retarded.
This is the command I used into Jenkins when I did tried cppcheck:
String cmd = "cppcheck --project=${scriptConfig} --xml --xml-version=2
${otherOptions} 2> ${outputXml}";
The first –xml should not be necessary according to the doc, but I added it
anyway just in case, but failure is unreliable like you did discover.
When I got time I would give https://codechecker.readthedocs.io/en/latest/ a go
to see what it can do, it use llvm/clang with a better CLI
Jérôme Godbout, B. Ing.
Software / Firmware Team Lead
O: (418) 682-3636 ext.: 114
C: (581) 777-0050
[email protected]<mailto:[email protected]>
[signature_1664488747]<https://www.dimonoff.com/>
dimonoff.com<https://www.dimonoff.com/>
1015 Avenue Wilfrid-Pelletier,
Québec, QC G1W 0C4, 4e étage
From: [email protected] <[email protected]> on
behalf of jesus fernandez <[email protected]>
Date: Friday, March 26, 2021 at 10:38 AM
To: [email protected] <[email protected]>
Subject: Re: How to publish cppcheck results in a pipeline?
Thanks Jerome I use sonarqube at the moment ( I am also learning on this one,
but at least is working) but I wanted to check other alternatives as sonarqibe
slow down the pipeline as it takes quiet some computing time. Would you
recommend sonarqube over cppcheck for a jenkins pipeline?
El vie., 26 mar. 2021 14:52, Jérôme Godbout
<[email protected]<mailto:[email protected]>> escribió:
You probably need something like this:
cppcheck --xml-version=2 --enable=all <path1> <path2> 2>samplecppcheck.xml
https://stackoverflow.com/questions/10611011/cannot-generate-xml-output-from-cppcheck
cppcheck is a pain from command line, the command line was an after though,
they screw big time. I stop using it just for that reason, the CLI is not
matching the GUI and the results are unpredictable in case of errors. The fact
that it requires the redirection of std_err, just that show a bad design from
people who doesn’t give a damn about CLI. I strongly recommend you find
something else to do your static analysis into your CI.
Jérôme Godbout, B. Ing.
Software / Firmware Team Lead
O: (418) 682-3636 ext.: 114
C: (581) 777-0050
[email protected]<mailto:[email protected]>
[signature_1613841900]<https://www.dimonoff.com/>
dimonoff.com<https://www.dimonoff.com/>
1015 Avenue Wilfrid-Pelletier,
Québec, QC G1W 0C4, 4e étage
From: [email protected]<mailto:[email protected]>
<[email protected]<mailto:[email protected]>> on
behalf of Ullrich Hafner
<[email protected]<mailto:[email protected]>>
Date: Friday, March 26, 2021 at 7:44 AM
To: Jenkins Users
<[email protected]<mailto:[email protected]>>
Subject: Re: How to publish cppcheck results in a pipeline?
I don’t know. Don’t you have a dedicated forum to ask cppcheck questions?
I still do not understand why you are redirecting stdout or stderr. I would
assume that every tool that creates XML files automatically creates the file in
your workspace. Did you check the workspace if there is a file if you omit the
redirect (>)?
Am 26.03.2021 um 11:28 schrieb jesus fernandez
<[email protected]<mailto:[email protected]>>:
Thanks for the replies but how woud the command be then? something like this
cppcheck "E:/Source" --force — enable=all — inconclusive — xml — xml-version=2
. > cppcheck.xm
El jueves, 25 de marzo de 2021 a las 21:49:15 UTC+1,
[email protected]<http://gmail.com> escribió:
Yes, this is definitely not XML :-)
This is the stderr of your program!
2 > cppcheck.xml pipes your stderr to a file. You do not need this part.
Am 25.03.2021 um 20:08 schrieb jesus fernandez
<[email protected]<mailto:[email protected]>>:
so it seems like if it basically is writting all the outputs the cmd throws
El jueves, 25 de marzo de 2021 a las 20:07:20 UTC+1, jesus fernandez escribió:
the supposely .xml does not have any format, these are the first 5 lines:
Checking E:\Source\Game\AchievementManager.cpp ...
Checking E:\Source\Game\AchievementManager.cpp:
APP_STEAM;FINAL_RELEASE;_DEBUG...
Checking E:\Source\Game\AchievementManager.cpp:
APP_STEAM;NEED_AOE1DE_ACHIEVEMENT_TEST;_DEBUG...
Checking E:\Source\Game\AchievementManager.cpp:
APP_STEAM;NEED_AOE3DE_ACHIEVEMENT_TEST;_DEBUG...
Checking E:\Source\Game\AchievementManager.cpp: APP_STEAM;_DEBUG...
El jueves, 25 de marzo de 2021 a las 19:47:22 UTC+1,
[email protected]<mailto:[email protected]> escribió:
If you can’t check on your own if the file contains valid XML can you please
show the first 5 lines of the XML file here?
Am 25.03.2021 um 19:36 schrieb jesus fernandez
<[email protected]<mailto:[email protected]>>:
I thought the ```bat'cppcheck "E:/Source" --force — enable=all — inconclusive
— xml — xml-version=2 . 2 > cppcheck.xml'``` command does genearate a valid
xml. is it a matter of missing parameters or a matter of having to parse the
output? in the documentation and the SO link I attached it is supposed to be
done like that... what am I missing here?
El jueves, 25 de marzo de 2021 a las 18:21:38 UTC+1,
[email protected]<http://gmail.com/> escribió:
The exception says it is not a valid XML file. Is it a valid XML file? Seems
that there is content before the fir XML tag. Can you open it in an editor that
can validate the XML?
Am 25.03.2021 um 17:57 schrieb jesus fernandez
<[email protected]<mailto:[email protected]>>:
Thanks for replying, I have opened and it has 2000 lines of code but I do not
know if it is valid or not as I have never used cppcheck before, and if it is
not valid is it because I am not using the right parameters when calling
cppcheck or how?
El jueves, 25 de marzo de 2021 a las 17:44:44 UTC+1,
[email protected]<http://gmail.com/> escribió:
It look like your create XML is not valid. Can you please open the XML file and
check?
Am 25.03.2021 um 17:40 schrieb jesus fernandez
<[email protected]<mailto:[email protected]>>:
I am learning about Jenkins on my own, and I wanted to try the cppcheck plugin,
I have setup the following sample pipeline:
```
pipeline {
agent any
stages {
stage('analysis') {
steps {
script{
bat'cppcheck "E:/Source" --force — enable=all —
inconclusive — xml — xml-version=2 . 2 > cppcheck.xml'
}
}
}
}
post {
always {
// scanForIssues tool: cppCheck(pattern: 'cppcheck.xml')
publishCppcheck pattern:'cppcheck.xml'
}
}
}
```
But I get an error in the post step which I do not know if it is related to my
projecto or if I am doing something wrong. I have follow the instructions on
this thread [cppcheck][1]but it does not seem to work, wehther I use
```publushCppcheck``` :
```
[Pipeline] { (Declarative: Post Actions)
[Pipeline] publishCppcheck (hide)
[Cppcheck] Starting the cppcheck analysis.
[Cppcheck] Processing 1 files with the pattern 'cppcheck.xml'.
[Cppcheck] Parsing throws exceptions. javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException; systemId:
file:/C:/Users/anton/.jenkins/workspace/JOB4/cppcheck.xml; lineNumber: 1;
columnNumber: 1; El contenido no está permitido en el prólogo.]
[Cppcheck] java.io.IOException: javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException; systemId:
file:/C:/Users/anton/.jenkins/workspace/JOB4/cppcheck.xml; lineNumber: 1;
columnNumber: 1; El contenido no está permitido en el prólogo.]
at
org.jenkinsci.plugins.cppcheck.parser.CppcheckParser.parse(CppcheckParser.java:67)
at
org.jenkinsci.plugins.cppcheck.CppcheckParserResult.invoke(CppcheckParserResult.java:69)
at
org.jenkinsci.plugins.cppcheck.CppcheckParserResult.invoke(CppcheckParserResult.java:24)
at hudson.FilePath.act(FilePath.java:1164)
at hudson.FilePath.act(FilePath.java:1147)
at
org.jenkinsci.plugins.cppcheck.CppcheckPublisher.perform(CppcheckPublisher.java:337)
at jenkins.tasks.SimpleBuildStep.perform(SimpleBuildStep.java:123)
at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:99)
at org.jenkinsci.plugins.workflow.steps.CoreStep$Execution.run(CoreStep.java:69)
at
org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.xml.bind.UnmarshalException
```
or ```scanforIssues``` from warnings ng plugin::
```
[Pipeline] { (Declarative: Post Actions)
[Pipeline] scanForIssues
[CPPCheck] [-ERROR-] Parsing of file
'C:\Users\anton\.jenkins\workspace\JOB4\cppcheck.xml' failed due to an
exception:
[CPPCheck] [-ERROR-] com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected
character 'C' (code 67) in prolog; expected '<'
at [row,col {unknown-source}]: [1,1]
[CPPCheck] [-ERROR-] at [row,col {unknown-source}]: [1,1]
[CPPCheck] [-ERROR-] at
com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:648)
[CPPCheck] [-ERROR-] at
com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2047)
[CPPCheck] [-ERROR-] at
com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1069)
[CPPCheck] [-ERROR-] at
se.bjurr.violations.lib.parsers.CPPCheckParser.parseReportOutput(CPPCheckParser.java:43)
[CPPCheck] [-ERROR-] at
edu.hm.hafner.analysis.parser.violations.AbstractViolationAdapter.parse(AbstractViolationAdapter.java:35)
[CPPCheck] [-ERROR-] at
io.jenkins.plugins.analysis.core.model.FilesScanner.aggregateIssuesOfFile(FilesScanner.java:105)
[CPPCheck] [-ERROR-] at
io.jenkins.plugins.analysis.core.model.FilesScanner.scanFiles(FilesScanner.java:89)
[CPPCheck] [-ERROR-] at
io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:72)
[CPPCheck] [-ERROR-] at
io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:30)
[CPPCheck] [-ERROR-] at hudson.FilePath.act(FilePath.java:1164)
[CPPCheck] [-ERROR-] at hudson.FilePath.act(FilePath.java:1147)
[CPPCheck] [-ERROR-] at
io.jenkins.plugins.analysis.core.model.ReportScanningTool.scanInWorkspace(ReportScanningTool.java:152)
[CPPCheck] [-ERROR-] at
io.jenkins.plugins.analysis.core.model.ReportScanningTool.scan(ReportScanningTool.java:134)
[CPPCheck] [-ERROR-] at
io.jenkins.plugins.analysis.core.steps.IssuesScanner.scan(IssuesScanner.java:95)
[CPPCheck] [-ERROR-] at
io.jenkins.plugins.analysis.core.steps.ScanForIssuesStep$Execution.run(ScanForIssuesStep.java:214)
[CPPCheck] [-ERROR-] at
io.jenkins.plugins.analysis.core.steps.ScanForIssuesStep$Execution.run(ScanForIssuesStep.java:175)
[CPPCheck] [-ERROR-] at
org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
[CPPCheck] [-ERROR-] at
java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
[CPPCheck] [-ERROR-] at java.util.concurrent.FutureTask.run(Unknown Source)
[CPPCheck] [-ERROR-] at
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
[CPPCheck] [-ERROR-] at
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
[CPPCheck] [-ERROR-] at java.lang.Thread.run(Unknown Source)
[CPPCheck] [-ERROR-] [wrapped] edu.hm.hafner.analysis.ParsingException:
Exception occurred during parsing
WstxUnexpectedCharException: Unexpected character 'C' (code 67) in prolog;
expected '<'
at [row,col {unknown-source}]: [1,1]
com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'C' (code
67) in prolog; expected '<'
at [row,col {unknown-source}]: [1,1]
at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:648)
at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2047)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1069)
at
se.bjurr.violations.lib.parsers.CPPCheckParser.parseReportOutput(CPPCheckParser.java:43)
at
edu.hm.hafner.analysis.parser.violations.AbstractViolationAdapter.parse(AbstractViolationAdapter.java:35)
at
io.jenkins.plugins.analysis.core.model.FilesScanner.aggregateIssuesOfFile(FilesScanner.java:105)
at
io.jenkins.plugins.analysis.core.model.FilesScanner.scanFiles(FilesScanner.java:89)
at
io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:72)
at
io.jenkins.plugins.analysis.core.model.FilesScanner.invoke(FilesScanner.java:30)
at hudson.FilePath.act(FilePath.java:1164)
at hudson.FilePath.act(FilePath.java:1147)
at
io.jenkins.plugins.analysis.core.model.ReportScanningTool.scanInWorkspace(ReportScanningTool.java:152)
at
io.jenkins.plugins.analysis.core.model.ReportScanningTool.scan(ReportScanningTool.java:134)
at
io.jenkins.plugins.analysis.core.steps.IssuesScanner.scan(IssuesScanner.java:95)
at
io.jenkins.plugins.analysis.core.steps.ScanForIssuesStep$Execution.run(ScanForIssuesStep.java:214)
at
io.jenkins.plugins.analysis.core.steps.ScanForIssuesStep$Execution.run(ScanForIssuesStep.java:175)
at
org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution.lambda$start$0(SynchronousNonBlockingStepExecution.java:47)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
```
[1]:
https://stackoverflow.com/questions/45836071/cppcheck-into-jenkins-with-qt-project
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected]<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/eefe0887-c933-4541-aab3-1f286c04b371n%40googlegroups.com<https://groups.google.com/d/msgid/jenkinsci-users/eefe0887-c933-4541-aab3-1f286c04b371n%40googlegroups.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected]<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/8c629824-db3d-404f-9845-a95f14f4849dn%40googlegroups.com<https://groups.google.com/d/msgid/jenkinsci-users/8c629824-db3d-404f-9845-a95f14f4849dn%40googlegroups.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected]<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/1cfaf8d9-b011-4249-9540-168f075d4049n%40googlegroups.com<https://groups.google.com/d/msgid/jenkinsci-users/1cfaf8d9-b011-4249-9540-168f075d4049n%40googlegroups.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected]<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/d268e9b6-727c-4697-87e1-a9df64781a60n%40googlegroups.com<https://groups.google.com/d/msgid/jenkinsci-users/d268e9b6-727c-4697-87e1-a9df64781a60n%40googlegroups.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to
[email protected]<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/233a664a-9d1c-4833-b6e7-29f959b374cfn%40googlegroups.com<https://groups.google.com/d/msgid/jenkinsci-users/233a664a-9d1c-4833-b6e7-29f959b374cfn%40googlegroups.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to
[email protected]<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/A54FBCD1-C520-4109-9A5B-4CEECF0B8F4B%40gmail.com<https://groups.google.com/d/msgid/jenkinsci-users/A54FBCD1-C520-4109-9A5B-4CEECF0B8F4B%40gmail.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to a topic in the Google
Groups "Jenkins Users" group.
To unsubscribe from this topic, visit
https://groups.google.com/d/topic/jenkinsci-users/IEyGzpdo1-8/unsubscribe.
To unsubscribe from this group and all its topics, send an email to
[email protected]<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/QB1PR01MB3844C2C47704FA2735D7C364CD619%40QB1PR01MB3844.CANPRD01.PROD.OUTLOOK.COM<https://groups.google.com/d/msgid/jenkinsci-users/QB1PR01MB3844C2C47704FA2735D7C364CD619%40QB1PR01MB3844.CANPRD01.PROD.OUTLOOK.COM?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to
[email protected]<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/CALZFchfsYmyonc-MPWFFt3yR_C_fSLs5VbO%2B%2B99jL9ZRVyxX%3Dg%40mail.gmail.com<https://groups.google.com/d/msgid/jenkinsci-users/CALZFchfsYmyonc-MPWFFt3yR_C_fSLs5VbO%2B%2B99jL9ZRVyxX%3Dg%40mail.gmail.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/QB1PR01MB3844498655B66ADA3968555CCD619%40QB1PR01MB3844.CANPRD01.PROD.OUTLOOK.COM.