7

Cコードの静的分析にcppcheckを使用していますが、XMLを取得できないようです。XMLファイルをJenkinsで使用する必要があります

これが私がこれまでに試したことです:

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を取得しますが、ファイルでは取得しません

4

3 に答える 3

11

私はCppcheck開発者です。

レポートをファイルにパイプする必要があります。

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

コマンドラインに関する小さなヒント。ほとんどの場合、を使用することをお勧めします* .c*.hの代わりに。

于 2012-05-16T06:08:05.660 に答える
4

実際、これが適切なxml出力を取得するためのコマンドです。

cppcheck --xml --xml-version=2 --enable=all <path1> <path2> 2>samplecppcheck.xml
于 2015-04-13T19:52:05.180 に答える
0

その2>部分は明らかにシェル構文であり、シェルインタープリターのコンテキストからのみ機能することを目的としています。では、シェルから実行していない場合はどうすればよいでしょうか。単なる「引数付きのコマンド」タイプのインターフェース(、、envなどxargsdocker runですか?

言うまでもなく、すべてをラップするという明らかな回避策sh -cは、恐ろしいアンチパターンです。引用とエスケープは正しく行うのが難しく、ほとんどのプログラマーは試行すらしません。その結果、コードが脆弱になり、セキュリティホールが発生する可能性があります。これは、出力ファイルを指定するための不合理な複雑さであり、何か間違ったことをしているという明確な兆候です。

ラッパースクリプトを使用すると、問題を正しい方法で解決できます

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

…しかし、それはファイルであり、それ自体が複雑になる可能性があります。幸い、そのスクリプトは次のようなインライン形式で記述できます。

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

これは現在、プレーンな引数リストの形式になっているため、すべてのシェル、およびのような非シェルで機能しdocker runます。

于 2016-05-08T21:47:12.417 に答える