Te arotake motuhake o PVS-Studio (Linux, C++)

I kite ahau i tetahi panui i akohia e te PVS ki te tātari i raro i te Linux, ka whakatau ahau ki te whakamatau i aku kaupapa ake. A koinei te mea i puta mai.


Tuhinga

  1. Плюсы
  2. Минусы
  3. Ngā putanga
  4. Afterword

Плюсы

Tautoko whakautu

I tono ahau i tetahi kii whakamatautau ka tukuna mai e ratou ki ahau i taua ra ano.

He tino marama nga tuhinga

I taea e maatau te whakarewa i te kaitirotiro kaore he raru. Kei te waatea ano te awhina mo nga whakahau papatohu (ahakoa kei konei etahi amuamu, tirohia te waahanga Минусы).

Ka taea te tātari miro-maha

He kōwhiringa "paerewa" te kaitātari -j, ka taea te mahi tātaritanga i roto i nga mahi maha. Ka whakaora tenei i te wa roa.

He tirohanga pai

He maha nga momo putanga rereke, mai i te kuputuhi ki te ngutu tukutuku iti. He waatea te atanga tukutuku, he poto, he tohu kei te taha o nga rarangi o te waehere me nga hononga ki nga whakaahuatanga tātaritanga.

He ngawari te whakauru ki roto i te huihuinga

Ko nga tuhinga katoa kei runga i to raatau paetukutuku, ka taea e au te kii mena ka hangaia to kaupapa ma te whakamahi i te CMake, he tino ngawari nga mea katoa.

He pai nga whakaahuatanga tātaritanga

Mena ka whakaputa koe i te putanga i roto i te aratau fullhtml, ka whai hononga ki ia karere ki te whakaahuatanga tātaritanga, me nga whakamaramatanga, nga tauira waehere me nga hononga taapiri.

Минусы

Te kuaretanga o te reo C++ e te kaitirotiro

Kia aroha mai, i etahi wa ka hapa te wetereo a PVS me te whakaputa i nga karere pai teka ina tino tika te waehere.

Hei tauira, he mahi ka hoki mai 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));
}

Ae ko te kupu matua auto Ka taea te tikanga void, koinei te take auto. Engari na PVS nga korero e whai ake nei:

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.

Pae tino puhoi

Ae, kei te atanga tukutuku kei te taha o ia karere he hononga ki te whakaahuatanga tātaritanga me nga tauira. Engari ka paatohia e koe tetahi hononga, me tatari koe mo te wa roa, a, i etahi wa ka puta 504 Gateway Te Wa-mutu.

Reo

Ko nga whakaahuatanga katoa kei te reo Russian, he pai. Engari ko nga hononga mai i te ripoata ka arahi tonu ki te putanga Ingarihi. He pai ki te huri i te reo kia taea ai e koe te tiro tonu i nga tātaritanga i roto i te reo Russian. Kaore au i kitea he whiringa penei i te atanga.

He uaua ki te mahi me nga taumata tātaritanga ma te papatohu

Me timata ma te meka ko nga whakahau e rua i whakamahia (tenei pvs-studio-analyzer и plog-converter) rerekē ngā whakatakotoranga mō te whakapūtā i ngā tātaritanga.

Awhina mo pvs-studio-analyzer panui:

-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

He roa ahau e ngana ana ki te kimi haere ki hea tāpiri (“te taapiri i nga uara”) taviri. I ngana ahau ki te whakarārangi i wehea e te piko:

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

He maha nga wa i whakamatau ahau ki te rehita i te matua:

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

Katahi ano ahau ka mohio he kopare moka enei! A ka hiahia koe whakarāpopotoa kaore tāpiri tikanga. Hei tauira, ki te tiki tātaritanga whanui, tātaritanga mo nga arotautanga moroiti me te MISRA, me whakariterite e koe (4 + 8 + 32 = 44):

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

Ko te whakamahi i nga bitmasks ki nga atanga kaiwhakamahi he ahua kino. Ka taea te whakarapopototanga o enei mea katoa i roto, a ka taea te whakarite he huinga haki mo te kaiwhakamahi.

I tua atu, kei reira ano he taputapu plog-converter, e whakaputa ana i nga korero tātari pateko ka taea e te tangata te panui. Kei a ia etahi atu raruraru.

He awhina mo te kaupapa plog-converter pūrongo:

-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

Ko etahi "taumata" i puta mai i konei karekau i mua, kaore ano i kitea e au tetahi mea mo ratou i roto i nga tuhinga.

I te nuinga, kaore i te marama. Koinei te take i whakaritea e ahau nga mea katoa ki te morahi.

He roopu oati poauau mo Catch

E rua o nga kaupapa e toru i wetewetehia e au ka whakamahi i te whare pukapuka whakamatautau wae Catch2. A ko te roopu o nga karere (!!! 90 i roto i te 138 i roto i tetahi me 297 i roto i te 344 i tetahi atu!!!) e whai ake nei te ahua:

Te arotake motuhake o PVS-Studio (Linux, C++)

Karekau e whai whakaaro ki te miro maha

He maha nga whakapae teka mo nga taurangi kare e huri, he kopikopiko mutunga kore ranei, i te mea ko te mahi me enei taurangi ka puta mai i nga miro rereke, a ki te kore e penei, karekau nga whakamatautau wae e mahi.

Te arotake motuhake o PVS-Studio (Linux, C++)

Heoi, ka taea e te kaitirotiro pateko te whai whakaaro ki tenei? Kaua e mohio.

Ngā putanga

Karekau a PVS i kite i etahi pepeha tuturu i aku kaupapa puna tuwhera pakaru и Takawaenga, tae atu ki roto i tetahi tauira mahi, na te mea e tino kitea ana, kaore e taea e au te whakaatu. He pono, he mea tika kia maumahara ko etahi o nga ngoikoretanga kua mau me te whakatika i mua i te whakamahi Cppcheck и scan-build.

I te nuinga o te waa, he rite tonu te whakaaro mai i enei kaitirotiro katoa: ae, ka mau ratou i tetahi mea, i etahi wa he mea nui, engari i te nuinga o te waa he nui te kaikoipi.

Ka taea (a he pai ki a au te whakaaro) ka whakamahia e to taatau roopu nga tikanga whanaketanga rorohiko e taea ai e matou te whakaputa i te iti rawa o te waehere kino. He pai ake kia kaua e hanga raruraru i te wikitoria maia.

Na reira, ka whai waahi ahau ki te tuku tohutohu mo te tuhi ki te C++ kia kore ai e kopere nga waewae o tetahi ki te patu ranei i te rae o tetahi ki te rake.

Whakanuia nga mahi tātaritanga whakahiato

Ka whakamahia e ta maatau roopu (me te tohutohu ki a koe) nga whiringa whakahiato e whai ake nei:

-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

Whakahohehia i roto i to kaupapa me te ako nui mo to waehere.

Kia mau ki te paerewa

Whakamātauria kia kaua e whakamahi i nga mea e whakawhirinaki ana ki te papaaho mena kei reira nga taapiri paerewa, a ki te kore e taea e koe te mahi me te kore o raatau, takai ki roto i nga poraka motuhake mo nga tonotono (me etahi atu mea ranei) kaua e tuku kia whakahiatohia to waehere i raro i nga tikanga kore tautoko.

Kia mau ki nga tikanga mahi paerewa

Ko te taapiri me taapiri, me whakarea te whakarea, me mahi te waea mahi, me kape te kape, me kawe te kawe, me tuku te ipu, me whai whakatairanga te kaitoro. ++ me te whakakore korero *. A pera tonu me era atu.

Ki taku whakaaro he marama te whakaaro. Kua whakaritea nga tikanga kaore e herea, engari ko nga kaiwhakamahi me nga kaipanui katoa o to waehere ka tumanako kia kite. Kaua e ngana ki te whakapohehe i etahi atu, ki te kore ka whakapohehe koe ia koe ano.

Tuhia te waehere hototahi

Tuatahi, ko taku tikanga ko te whare pukapuka paerewa. He tino hiahia kia whakamahia nga hononga o o karaehe me o mahi me nga whare pukapuka paerewa me etahi atu whare pukapuka (hei tauira, Boost).

Tena koa tirohia nga hononga STL me te Boost. Me nga onge, ka kite koe i tetahi tauira tika ki reira.

Whakanuia nga taputapu puna tuwhera

Mo taua tātaritanga pateko, e rua neke atu nga taputapu kore utu ka taea te hono kotahi noa ki tetahi kaupapa me te punaha hanga CMake.

Ka taea e koe te panui atu mo tenei i roto i taku whakaputanga tata.

Afterword

Ka mutu, e hiahia ana ahau ki te whakanui i te mea kaore au e kii kia kaua e whakamahi i te PVS me etahi atu kaitirotiro tuuturu. Engari e akiaki ana ahau ki a koe ki te whakaaro me pehea te mahi i kitea e te kaitirotiro pateko nga hapa nui i roto i to waehere.

He hua noa tenei. Me rapu me te whakakore i te take.

Source: will.com

Tāpiri i te kōrero