Ukubuyekezwa okuzimele kwe-PVS-Studio (Linux, C++)

Ngabona incwadi i-PVS eyayifunde ukuyihlaziya ngaphansi kwe-Linux, ngase nginquma ukuyizama kumaphrojekthi ami. Futhi yilokhu okwaphuma kukho.


Okuqukethwe

  1. ΠŸΠ»ΡŽΡΡ‹
  2. ΠœΠΈΠ½ΡƒΡΡ‹
  3. Imiphumela
  4. I-Afterword

ΠŸΠ»ΡŽΡΡ‹

Ukwesekwa okusabelayo

Ngacela ukhiye wokuzama futhi bangithumelela wona ngalo lolo suku.

Amadokhumenti acacile

Sikwazile ukwethula i-analyzer ngaphandle kwezinkinga. Usizo lwemiyalo ye-console luyatholakala (yize kukhona izikhalazo lapha, bheka isigaba ΠœΠΈΠ½ΡƒΡΡ‹).

Amathuba okuhlaziya anezintambo eziningi

I-analyzer inenketho "ejwayelekile". -j, okuvumela ukuhlaziya ukuthi kwenziwe ngokuhambisana emisebenzini eminingana. Lokhu konga isikhathi esiningi.

Ukubonwa okuhle

Amafomethi amaningi okukhiphayo ahlukene, ukusuka embhalweni kuya kumabhobho amancane ewebhu. Ukuxhumana kwewebhu kulula, kufushane, namacebo eduze kwemigqa kukhodi kanye nezixhumanisi ezincazelweni zokuxilonga..

Ukuhlanganiswa okulula kumhlangano

Wonke amadokhumenti akuwebhusayithi yabo, ngingasho nje ukuthi uma iphrojekthi yakho yakhiwe kusetshenziswa i-CMake, khona-ke konke kulula kakhulu.

Izincazelo ezinhle zokuxilonga

Uma ukhiqiza okukhiphayo kumodi fullhtml, bese umlayezo ngamunye unesixhumanisi sencazelo yokuxilonga, enezincazelo, izibonelo zekhodi nezixhumanisi ezengeziwe.

ΠœΠΈΠ½ΡƒΡΡ‹

Ukungazi kahle kolimi lwe-C++ ngomhlaziyi

Ngeshwa, i-PVS kwesinye isikhathi yenza amaphutha e-syntax futhi ikhiqize imilayezo eqondile engamanga lapho ikhodi ilungile ngokuphelele.

Isibonelo, kunomsebenzi obuyayo void:

template <typename T>
auto copy (const void * source, void * destination)
    ->
        std::enable_if_t
        <
            std::is_copy_constructible<T>::value
        >
{
    new (destination) T(*static_cast<const T *>(source));
}

Yebo igama elingukhiye auto Kungasho void, injalo nje imoto. Kodwa i-PVS ikhiqize imilayezo elandelayo:

dynamic_tuple_management.hpp:29:1: error: V591 Non-void function should return a value.
dynamic_tuple_management.hpp:29:1: error: V2542 Function with a non-void return type should return a value from all exit paths.

Isayithi elinensa kakhulu

Yebo, kusixhumi esibonakalayo sewebhu eduze nomlayezo ngamunye kukhona isixhumanisi sencazelo ehambisanayo yokuxilonga enezibonelo. Kodwa uma uchofoza isixhumanisi, kufanele ulinde isikhathi eside, futhi ngezinye izikhathi kuyenzeka 504 Gateway Isikhathi Siphelile.

Ulimi

Zonke izincazelo zingesiRashiya, okuyinto enhle. Kodwa izixhumanisi ezivela embikweni zihlala ziholela enguqulweni yesiNgisi. Kungaba kuhle ukwazi ukushintsha ulimi ukuze ukwazi ukubuka ukuxilonga ngokushesha ngesi-Russian. Angiyitholanga inketho enjalo kusixhumi esibonakalayo.

Akulula ukusebenza ngamaleveli okuxilonga usebenzisa ikhonsoli

Ake siqale ngeqiniso lokuthi imiyalo emibili esetshenzisiwe (le pvs-studio-analyzer ΠΈ plog-converter) amafomethi ahlukene okucacisa ukuxilonga.

Usizo lwe pvs-studio-analyzer uyafunda:

-a [MODE], --analysis-mode [MODE]
    MODE defines the type of warnings:
    1 - 64-bit errors;
    2 - reserved;
    4 - General Analysis;
    8 - Micro-optimizations;
    16 - Customers Specific Requests;
    32 - MISRA.
    Modes can be combined by adding the values
    Default: 4

Ngichithe isikhathi eside ngizama ukuthi ngiyephi engeza (β€œukwengeza amanani”) okhiye. Ngizamile ukuzifaka ohlwini zihlukaniswe ngokhefana:

pvs-studio-analyzer analyze ... -a 1,4,16

Ngizame ukubhalisa ukhiye izikhathi ezimbalwa:

pvs-studio-analyzer analyze ... -a 1 -a 4 -a 16

Kungaleso sikhathi kuphela lapho ngabona khona ukuthi lezi kwakuyizifihla-buso! Futhi udinga Fingqakodwa cha engeza izincazelo. Isibonelo, ukuze uthole ukuxilonga okujwayelekile, ukuxilonga kokusebenza kahle okuncane kanye ne-MISRA, udinga ukukufingqa (4 + 8 + 32 = 44):

pvs-studio-analyzer analyze ... -a 44

Ukusebenzisa ama-bitmasks ezindaweni zokusebenzelana nomsebenzisi kuvamise ukuthi kubi. Konke lokhu kungase kufinyezwe ngaphakathi, futhi iqoqo lamafulegi lingasethwa kumsebenzisi.

Ngaphezu kwalokho, kukhona utility plog-converter, ekhiqiza ulwazi lokuhlaziya olumile olufundeka umuntu. Unezinye izinkinga.

Usizo lohlelo plog-converter kubika:

-a, --analyzer            Specifies analyzer(s) and level(s) to be
                          used for filtering, i.e.
                          'GA:1,2;64:1;OP:1,2,3;CS:1;MISRA:1,2'
                          Default: GA:1,2

Amanye "amazinga" avele lapha abengekho ngaphambilini, futhi angitholanga lutho ngawo emibhalweni.

Ngokuvamile, akucaci. Yingakho ngibeke yonke into phezulu.

Isigejane senhlamba eyisiphukuphuku ku-Catch

Amaphrojekthi amabili kwamathathu engiwahlaziyile asebenzisa umtapo wolwazi wokuhlola amayunithi Bamba2. Futhi isabelo sebhubesi semilayezo (!!! 90 ku-138 kwesinye kanye nama-297 kokungu-344 kwenye!!!) inaleli fomu elilandelayo:

Ukubuyekezwa okuzimele kwe-PVS-Studio (Linux, C++)

Ayinaki i-multithreading

Kunamaqiniso amaningi angamanga mayelana nokuguquguquka okungaguquki noma izihibe ezingapheli, kuyilapho ukusebenza nalezi ziguquguqukayo kwenzeka emicu ehlukahlukene, futhi ukube lokhu bekungenjalo, ukuhlolwa kweyunithi bekungeke kusebenze.

Ukubuyekezwa okuzimele kwe-PVS-Studio (Linux, C++)

Nokho, ingabe umhlaziyi omile angakucabangela lokhu? Angazi.

Imiphumela

I-PVS ayitholanga noma yiziphi iziphazamisi zangempela kumaphrojekthi wami womthombo ovulekile burst ΠΈ I-Proxima, kanye nasohlelweni olusebenzayo, okuthi, ngenxa yezizathu ezisobala, angikwazi ukwethula. Yiqiniso, kufanelekile ukukhumbula ukuthi ezinye iziphambeko sezivele zibanjiwe futhi zalungiswa kusenesikhathi usebenzisa Cppcheck ΠΈ scan-build.

Ngokuvamile, umbono ovela kubo bonke laba bahlaziyi ucishe ufane: yebo, babamba okuthile, ngezinye izikhathi ngisho nento ebalulekile, kodwa jikelele umdidiyeli wanele.

Kungenzeka (futhi mina ngokwami ​​ngithanda ukucabanga kanjalo) ukuthi ithimba lethu lisebenzise izinqubo zokuthuthukisa isofthiwe esivumela ukuthi sikhiqize inani elincane lekhodi ye-shitty. Kungcono ukungadali izinkinga kunokuzinqoba ngobuqhawe.

Ngakho-ke, ngithatha inkululeko yokunikeza iseluleko sendlela yokubhala ku-C++ ngendlela yokuthi ngingadubuli imilenze yanoma ubani noma ngishaye noma ubani ebunzini ngeraki.

Yenza okuningi ngokuxilonga komqambi

Ithimba lethu lisebenzisa (futhi likucebisa ukuthi) lezi zinketho zokuhlanganisa ezilandelayo:

-Werror

-Wall
-Wextra
-Wpedantic

-Wcast-align
-Wcast-qual
-Wconversion
-Wctor-dtor-privacy
-Wenum-compare
-Wfloat-equal
-Wnon-virtual-dtor
-Wold-style-cast
-Woverloaded-virtual
-Wredundant-decls
-Wsign-conversion
-Wsign-promo

Zinike amandla kuphrojekthi yakho futhi ufunde okuningi mayelana nekhodi yakho.

Namathela esimisweni

Zama ukungasebenzisi izinto ezincike endaweni uma kukhona ama-analogue ajwayelekile, futhi uma ungeke ukwazi ukwenza ngaphandle kwawo, zigoqe ngamabhulokhi akhethekile wama-macros (noma enye into) futhi ungavumeli ikhodi yakho ihlanganiswe ngaphansi kwezimo ezingasekelwa.

Namathela ku-semantics yokusebenza okujwayelekile

Ukwengeza kufanele kube ukuhlanganisa, ukuphindaphinda kufanele kube ukuphindaphinda, ikholi yomsebenzi kufanele kube ucingo lomsebenzi, ikhophi kufanele ikopishwe, ithwalwe, isiqukathi kufanele siphindaphindeke, isiphindisi sibe nephromoshini. ++ kanye nokuhlehla *. Futhi njalo njalo njalo.

Ngicabanga ukuthi umqondo ucacile. Kukhona izivumelwano ezimisiwe ezingabophezeli, kodwa bonke abasebenzisi nabafundi bekhodi yakho abalindele ukuyibona. Ungazami ukwedlula abanye, kungenjalo uzozidlula wena.

Bhala ikhodi ehambisanayo

Okokuqala nje, ngiqonde umtapo wolwazi ojwayelekile. Kufiseleka kakhulu ukuthi ukuxhumana kwamakilasi akho nemisebenzi kusetshenziswe nemitapo yolwazi ejwayelekile kanye neminye (isibonelo, i-Boost).

Zizwe ukhululekile ukubheka i-STL ne-Boost interface. Ngaphandle kokungavamile, uzobona imodeli efanelekayo lapho.

Yenza okuningi ngamathuluzi omthombo ovulekile

Ukuze uthole ukuhlaziya okufanayo okumile, kukhona okungenani amathuluzi amabili avulekile avulekile angaxhunywa kanye kunoma iyiphi iphrojekthi ngohlelo lokwakha lwe-CMake.

Ungafunda kabanzi ngalokhu ekushicileleni kwami ​​kwakamuva.

I-Afterword

Okokugcina, ngithanda ukugcizelela ukuthi angikhuthazi ukungasebenzisi i-PVS noma ezinye izihlaziyi ezimile. Kodwa ngiyakukhuthaza ukuthi ucabange ukuthi kwenzeka kanjani ukuthi i-analyzer emile ihlale ithola amaphutha abalulekile kukhodi yakho.

Lokhu kungumphumela nje. Kudingeka sibheke futhi siqede imbangela.

Source: www.habr.com

Engeza amazwana