2012-05-16 15 views
6

Sto usando cppcheck per l'analisi statica del codice C, ma non riesco a ottenere un XML. Ho bisogno del file XML per essere consumato da Jenkinsnon può generare output XML da cppcheck

Ecco quello che ho provato finora:

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 

io capisco l'XML su stdout, ma non solo in una file

risposta

7

Sono uno sviluppatore di Cppcheck.

È necessario reindirizzare il report al file.

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

Un piccolo suggerimento circa la linea di comando, nella maggior parte dei casi è meglio usare . anziché * .c * .h.

+0

ho usato "cppcheck file1.c --xml 2> & 1 | tee test2.xml" qualsiasi commento – kamal

+0

buona idea. quello dovrebbe funzionare –

+1

Hmmm. Per qualche ragione, non ho potuto farlo funzionare (sotto Windows 7, se questo è importante). Quando lo si collega a un file .xml come mostrato sopra, il file di output conterrà solo informazioni su quali file vengono elaborati e sullo stato di avanzamento, non sull'output xml (che vedo, ma solo nella finestra della console). – Leif

2

In realtà, ecco il comando per ottenere l'output xml corretto.

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

Per il [manuale] (http://cppcheck.sourceforge.net/manual.pdf), non è necessario il '--xml', solo' --xml-version = 2'. – phoenix

0

Tale 2> parte è ovviamente shell sintassi, ed ha il solo scopo lavorare dal contesto di un interprete di shell. Quindi cosa fare quando NON in esecuzione da una shell, solo un semplice tipo di interfaccia "comando con argomenti" (come env, xargs, docker run e così via)?

Dovrebbe essere inutile dire che la soluzione ovvia, avvolgendo il tutto in sh -c, è un antipattern orribile: Citazioni e la fuga è difficile da fare in modo corretto, la maggior parte dei programmatori non ci provo nemmeno, con conseguente codice fragili e un potenziale buco di sicurezza. Sarebbe una complicazione irragionevole specificare un file di output e un chiaro segnale che stai facendo qualcosa di sbagliato.

sceneggiatura Un wrapper consente di risolvere il problema nel modo giusto

#!/bin/sh 
exec "[email protected]" 2> result.xml 

... ma sarebbe un file, e che può essere una complicazione in sé. Per fortuna, lo script può essere scritto in una forma in linea come questa:

sh -c 'exec "$0" "[email protected]" 2> result.xml' cppcheck … 

Questo è ora sotto forma di un elenco di argomenti pianura, e quindi funziona in tutti i gusci, così come non conchiglie come docker run.

Problemi correlati