Ua ʻike au i kahi paʻi i aʻo ʻia e PVS e kālailai ma lalo o Linux, a ua hoʻoholo wau e hoʻāʻo ma kaʻu mau papahana ponoʻī. A ʻo kēia ka mea i puka mai.
Ua noi au i kī hoʻokolokolo a hoʻouna mai lākou iaʻu i ka lā hoʻokahi.
Maikaʻi nā palapala
Ua hoʻokō mākou i ka hoʻomaka ʻana i ka analyzer me ka pilikia ʻole. Loaʻa ke kōkua no nā kauoha console (ʻoiai aia kekahi mau hoʻopiʻi ma aneʻi, ʻike i ka ʻāpana Минусы).
Hiki i ka nānā ʻana i nā ʻāpana he nui
He koho "ma'amau" ka mea anaana -j, e ʻae ana e hana like ʻia ka nānā ʻana i nā hana he nui. Mālama kēia i ka manawa nui.
Aia nā palapala āpau ma kā lākou pūnaewele, hiki iaʻu ke ʻōlelo wale inā kūkulu ʻia kāu papahana me ka hoʻohana ʻana iā CMake, a laila maʻalahi loa nā mea āpau.
ʻO nā wehewehe diagnostic maikaʻi
Inā hoʻopuka ʻoe i ka hopena ma ke ʻano fullhtml, a laila loaʻa i kēlā me kēia memo kahi loulou i kahi wehewehe diagnostic, me nā wehewehe, nā laʻana code a me nā loulou hou.
ʻO ka naʻaupō o ka ʻōlelo C++ e ka mea hoʻoponopono
ʻO ka mea pōʻino, hana ʻo PVS i nā hewa syntax i kekahi manawa a hoʻopuka i nā leka maikaʻi hoʻopunipuni ke pololei loa ke code.
Eia kekahi laʻana, aia kahi hana e hoʻi 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 ka ʻōlelo nui auto Hiki ke manaʻo void, ʻo ia ke kumu ola auto. Akā ua hoʻopuka ʻo PVS i kēia mau memo:
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.
Paena lohi loa
ʻAe, ma ka pūnaewele pūnaewele e pili ana i kēlā me kēia memo he loulou i ka wehewehe diagnostic e pili ana me nā laʻana. Akā ke kaomi ʻoe i kahi loulou, pono ʻoe e kali lōʻihi, a i kekahi manawa e hiki mai ana 504 Gateway Time-out.
'Ōlelo
Aia nā wehewehe a pau ma ka ʻōlelo Lūkini, maikaʻi loa. Akā ʻo nā loulou mai ka hōʻike e alakaʻi mau i ka mana Pelekane. He mea maikaʻi e hiki ke hoʻololi i ka ʻōlelo i hiki iā ʻoe ke ʻike koke i nā diagnostics ma ka Lūkini. ʻAʻole i loaʻa iaʻu kahi koho ma ka interface.
He mea maʻalahi ka hana me nā pae diagnostic ma o ka console
E hoʻomaka me ka ʻoiaʻiʻo i hoʻohana ʻia nā kauoha ʻelua (kēia pvs-studio-analyzer и plog-converter) nā ʻano like ʻole no ka wehewehe ʻana i nā diagnostics.
Kokua no pvs-studio-analyzer heluhelu mai:
-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
Ua lōʻihi koʻu manawa e ʻimi nei i kahi e hele ai hoʻohui ("hoʻohui i nā waiwai") kī. Ua hoʻāʻo wau e papa inoa iā lākou i hoʻokaʻawale ʻia e nā koma:
pvs-studio-analyzer analyze ... -a 1,4,16
Ua ho'āʻo wau e hoʻopaʻa inoa i ke kī i nā manawa he nui:
pvs-studio-analyzer analyze ... -a 1 -a 4 -a 16
A laila wale nō wau i ʻike ai he mau makamaka ʻuʻuku kēia! A pono ʻoe hōʻuluʻulu,ʻaʻole hoʻohui nā manaʻo. No ka laʻana, e kiʻi i nā diagnostics maʻamau, diagnostics for micro-optimizations a me MISRA, pono ʻoe e hōʻuluʻulu iā lākou (4 + 8 + 32 = 44):
pvs-studio-analyzer analyze ... -a 44
ʻO ka hoʻohana ʻana i nā bitmasks i nā pilina mea hoʻohana he ʻano maikaʻi ʻole. Hiki ke hōʻuluʻulu ʻia kēia mau mea a pau i loko, a hiki ke hoʻonohonoho ʻia nā hae no ka mea hoʻohana.
Eia kekahi, aia kekahi mea pono plog-converter, ka mea e hoʻopuka ana i ka ʻike loiloi static hiki ke heluhelu ʻia e ke kanaka. Loaʻa iā ia nā pilikia ʻē aʻe.
Kōkua no ka papahana plog-converter nā hōʻike:
-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
Ua ʻike ʻia kekahi mau "pae" ma ʻaneʻi ʻaʻole ma laila ma mua, ʻaʻole wau i ʻike i kekahi mea e pili ana iā lākou ma ka palapala.
Ma ka laulā, ʻaʻole maopopo. ʻO ia ke kumu aʻu i hoʻonoho ai i nā mea a pau i ka palena kiʻekiʻe.
He pūʻulu hoʻohiki lapuwale ma Catch
ʻElua o nā papahana ʻekolu aʻu i kālailai ai e hoʻohana i kahi waihona hoʻāʻo ʻāpana ʻO Catch2. A ʻo ka hapa liona o nā memo (!!! 90 mai 138 i hoʻokahi a me 297 mai 344 i kekahi!!!) penei:
ʻAʻole noʻonoʻo i ka multithreading
Nui nā manaʻo maikaʻi ʻole e pili ana i nā ʻano loli ʻole a i ʻole nā loulou pau ʻole, ʻoiai ke hana nei me kēia mau ʻokoʻa mai nā loina like ʻole, a inā ʻaʻole pēlā, ʻaʻole e holo nā hoʻokolohua ʻāpana.
Eia nō naʻe, hiki i kahi mea loiloi static ke noʻonoʻo i kēia? ʻaʻole maopopo.
ʻAʻole i loaʻa i ka PVS kekahi mau pōʻino maoli i kaʻu mau papahana open source moku и Aʻe aʻe, a me kahi kikoʻī hana, no nā kumu maopopo, ʻaʻole hiki iaʻu ke hōʻike. ʻOiaʻiʻo, pono e hoʻomanaʻo i kekahi mau hemahema i hopu ʻia a hoʻoponopono ʻia ma mua o ka hoʻohana ʻana Cppcheck и scan-build.
Ma keʻano laulā, ʻano like ka manaʻo o kēia mau mea loiloi: ʻae, hopu lākou i kekahi mea, i kekahi manawa he mea koʻikoʻi, akā ʻo ka mea holoʻokoʻa ua lawa.
Hiki paha (a makemake wau e noʻonoʻo pēlā) ke hoʻohana nei kā mākou hui i nā hana hoʻomohala polokalamu e hiki ai iā mākou ke hana i ka liʻiliʻi o nā code shitty. ʻOi aku ka maikaʻi ʻaʻole e hana i nā pilikia ma mua o ka lanakila ʻana me ka heroically.
No laila, lawe wau i ka hāʻawi ʻana i kekahi mau ʻōlelo aʻo e pili ana i ke kākau ʻana i ka C ++ i ʻole e pana i nā wāwae o kekahi a i ʻole e paʻi i kekahi ma ka lae me ka rake.
E hoʻohana i nā diagnostics compiler
Ke hoʻohana nei kā mākou hui (a aʻo iā ʻoe) i kēia mau koho hoʻohui:
E ho'ā iā lākou i kāu papahana a aʻo nui e pili ana i kāu code.
Pili i ka maʻamau
E ho'āʻo e hoʻohana i nā mea e hilinaʻi ana i ka platform inā loaʻa nā analogues maʻamau, a inā ʻaʻole hiki iā ʻoe ke hana me ka ʻole o lākou, e hoʻopili iā lākou i nā poloka kūikawā no nā macros (a i ʻole kekahi mea ʻē aʻe) a mai ʻae wale i kāu code e hōʻuluʻulu ʻia ma lalo o nā kūlana i kākoʻo ʻole ʻia.
Hoʻopili i nā semantics hana maʻamau
Pono e hoʻohui, pono e hoʻonui i ka hoʻonui, pono e hoʻonui i ka hana, pono ke kāhea hana, pono ke kope kope, pono e halihali, pono ka ipu iterable, pono ke hoʻonui i ka iterator. ++ a me ka dereferencing *. A pela aku a pela aku.
Manaʻo wau ua maopopo ka manaʻo. Aia nā ʻaha kūkā i paʻa ʻole, akā e manaʻo nā mea hoʻohana a me nā mea heluhelu o kāu code e ʻike. Mai ho'āʻo e hoʻomāʻewaʻewa iā ʻoe iho.
Kākau i ke code kūpono
ʻO ka mea mua, ke ʻōlelo nei au i ka waihona maʻamau. He mea makemake nui ia e hoʻohana ʻia nā loulou o kāu mau papa a me nā hana me nā hale waihona puke maʻamau a me nā hale waihona puke ʻē aʻe (e laʻa, Boost).
E ʻoluʻolu e nānā i ka STL a me Boost interface. Me nā ʻokoʻa ʻokoʻa, e ʻike ʻoe i kahi kumu hoʻohālike kūpono ma laila.
E hoʻohana i nā mea hana open source
No ka hoʻohālikelike like ʻana, aia ma kahi o ʻelua mau mea hana manuahi hiki ke hoʻopili ʻia i hoʻokahi wale nō papahana me ka ʻōnaehana kūkulu CMake.
ʻO ka mea hope loa, makemake wau e hoʻoikaika ʻaʻole wau e aʻo e hoʻohana i ka PVS a i ʻole nā mea hoʻoponopono static ʻē aʻe. Akā ke paipai nei au iā ʻoe e noʻonoʻo e pili ana i ke ʻano o ka loaʻa ʻana o ka static analyzer i nā hewa nui i kāu code.
He hopena wale nō kēia. Pono mākou e ʻimi a hoʻopau i ke kumu.