无法从cppcheck生成XML输出

时间:2012-05-16 01:52:00

标签: cppcheck

我使用cppcheck进行C代码的静态分析,但似乎无法获得XML。我要求Jenkins使用XML文件

这是我到目前为止所尝试的内容:

runcppcheck.sh

#!/bin/sh
cd obj/msc
cppcheck --enable=all -I. -I. -I. -I. -I. -I. -I. -I. -I. -I. -I. /usr/include/ -I. obj/fap/ \
-DSUNOS -DSS -DSS_MT -DANSI -D_GNU_SOURCE -DSS_LINUX -D_REENTRANT -D__EXTENSIONS__ -DSUNOS -DCNS_PH1 -DDBG_TIMESTAMP -DLX_PRNT_TIMESTAMP \
-DDEBUGP -DLX -DLCLXT -DLXT_V1 -DLCLXUILXT -DLCXULILXT -DXU  -DLX -DLCLLX  -DSM -DLWLCLLX -DLCLXMILLX -DLCSMLXMILLX -DHR -DLX -DLCHRT \
-DLCHRUIHRT -DLCHRLIHIT -DLCLXLIHRT -DXU -DLCXULIHRT  -DLX -DLX_RTP -DLX_FASTRC -DCMINET_BSDCOMPAT -DSS_TICKS_SEC=100 -DCMFILE_REORG_1 \
-DCM_INET2 -D_GNU_SOURCE -DCMFILE_REORG_2 -DSSINT2 -DCMKV2 -DHI_MULTI_THREADED -DxCM_PASN_DBG -DxCCPU_DEBUG -DxRNC_OUTPUT_CONSOLE \
-DxCCPU_DEBUG_TRACE -DCCPU_DEBUG1 -DSS_PERF -DNO_ERRCLS -DNOERRCHK -DSS_M_PROTO_REGION -DxCCPU_DEBUG_TRACE1 -DxCCPU_DEBUG_TRACE2 \
-DCCPU_MEAS_CPU -DSTD_CCPU_IU -UMULTIPLE_CN_SUPPORT -DLONG_MSG -DTEST_CNS -UDCM_RTP_SESSID_ARRAY -DHR *.c *.h --xml ../../cppcheck-result.xml

我在stdout上获取XML,但不是在文件中

3 个答案:

答案 0 :(得分:8)

我是Cppcheck开发人员。

您需要将报告通过管道传输到文件中。

cppcheck file1.c --xml 2> cppcheck-result.xml

关于命令行的一个小提示,在大多数情况下,最好使用而不是 * .c * .h

答案 1 :(得分:2)

实际上,这是获取正确xml输出的命令。

cppcheck --xml --xml-version=2 --enable=all <path1> <path2> 2>samplecppcheck.xml

答案 2 :(得分:0)

2>部分显然是 shell 语法,并且只能在shell解释器的上下文中工作。那么当不从shell运行时,只需要一个简单的“带参数的命令”类型的接口(如envxargsdocker run等),该怎么做?

不用说明显的解决方法,将整个事情包裹在sh -c中,是一个可怕的反模式:引用和转义很难正确完成,大多数程序员甚至都不会尝试,导致脆弱代码和潜在的安全漏洞。这对于指定输出文件来说是一个不合理的复杂问题,并且是一个明确的迹象表明你做错了。

包装器脚本可让您以正确的方式解决问题

#!/bin/sh
exec "$@" 2> result.xml

...但那将是一个文件,这本身可能是一个复杂的问题。幸运的是,该脚本可以用这样的内联形式编写:

sh -c 'exec "$0" "$@" 2> result.xml' cppcheck …

现在这是一个普通参数列表的形式,因此适用于所有shell,以及docker run之类的非shell。