2012-05-16 14 views
6

Używam cppcheck do statycznej analizy kodu C, ale nie mogę uzyskać XML. I wymagają pliku XML do spożycia przez JenkinsaNie można wygenerować danych wyjściowych XML z cppcheck

Oto co próbowałem dotąd:

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 

ja rozumiem XML na standardowe wyjście, ale po prostu nie w plik

Odpowiedz

7

Jestem programistą Cppcheck.

Musisz przesłać raport do pliku.

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

Mała podpowiedź o swojej linii poleceń, w większości przypadków lepiej jest użyć . zamiast * .c * .h.

+0

Użyłem "cppcheck file1.c --xml 2> & 1 | tee test2.xml" żadnych komentarzy – kamal

+0

dobry pomysł. to powinno działać –

+1

Hmmm. Z jakiegoś powodu nie mogłem tego uruchomić (pod Windows 7, jeśli to ma znaczenie). Podczas wyprowadzania go do pliku .xml, jak pokazano powyżej, plik wyjściowy będzie zawierał tylko informacje o tym, które pliki są przetwarzane i postęp, a nie dane wyjściowe xml (które widzę, ale tylko w oknie konsoli). – Leif

2

Właściwie tutaj jest polecenie, aby uzyskać prawidłowe wyjście XML.

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

Zgodnie z [podręcznikiem] (http://cppcheck.sourceforge.net/manual.pdf), nie potrzebujesz '--xml', tylko' --xml-version = 2'. – phoenix

0

To 2> częścią jest oczywiście shell składni i jest przeznaczona wyłącznie do pracy w kontekście interpreter powłoki. Co więc zrobić, gdy NIE uruchamia się z powłoki, tylko zwykły typ polecenia "z argumentami" (np. env, xargs, docker run i inne)?

Nie trzeba dodawać, że oczywiste obejście problemu, owijając całość w sh -c, jest okropnym przeciwieństwem: cytowanie i ucieczka są trudne do wykonania, większość programistów nawet nie spróbuje, co skutkuje kruchym kodem i potencjalna luka w zabezpieczeniach. Byłoby to nieuzasadnionym komplikowaniem dla określenia pliku wyjściowego i wyraźnym znakiem, że robisz coś złego.

skrypt Owijka pozwala rozwiązać problem właściwą drogę

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

... ale byłoby to plik, a które mogą być powikłaniem w sobie. Szczęśliwie, że skrypt może być napisany w formie inline tak:

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

To jest teraz w formie listy argumentów prostym, a więc działa we wszystkich pocisków, jak również nie muszle jak docker run.

Powiązane problemy