Ko tetahi o nga ahuatanga o naianei mo te whakamahi i te kaitirotiro PVS-Studio ko tana whakauru ki nga punaha CI. A ahakoa ko te tātaritanga o te kaupapa PVS-Studio mai i te nuinga o nga punaha whakauru tonu ka taea te hanga ki etahi whakahau noa, kei te haere tonu taatau ki te hanga i tenei mahi kia pai ake. Kei a PVS-Studio te tautoko inaianei mo te huri i te putanga kaitirotiro ki te whakatakotoranga mo TeamCity - Momo Tirotiro TeamCity. Kia kite tatou pehea te mahi.
Nga korero mo te rorohiko i whakamahia
Nga korero mo te kaupapa e rangahaua ana
Me whakamatau tenei mahi me tetahi tauira mahi - me tātari te kaupapa OpenRCT2.
whakatikatikanga
Hei whakaora i te wa, ka pekehia e au te mahi whakaurunga ka timata mai i te wa e rere ana te tūmau TeamCity ki taku rorohiko. Me haere tatou ki: localhost:{tauranga kua tohua i te wa o te whakaurunga} (i taku keehi, localhost:9090) ka uru ki nga raraunga whakamana. I muri i to urunga ka mihihia e:
Patohia te paatene Waihanga Kaupapa. Muri iho, tohua Ma te ringa ka whakakiia nga mara.
I muri i te pehi i te paatene Waihanga, ka mihia e te matapihi me nga tautuhinga.
Kia paato tatou Waihanga whirihoranga hanga.
Whakakiia nga mara ka paato Waihanga. Ka kite matou i tetahi matapihi e tono ana ki a koe ki te whiriwhiri i tetahi punaha whakahaere putanga. I te mea ko nga puna kei te rohe, pawhiria Tīpoka.
Ka mutu, ka neke atu ki nga tautuhinga kaupapa.
Me taapirihia nga waahanga huihuinga, ki te mahi i tenei panui: Hanga nga taahiraa -> Tāpirihia te taahiraa hanga.
I konei ka whiriwhiri tatou:
- Momo Runner -> Raina Whakahau
- Whakahaere -> Hōtuhi Ritenga
I te mea ka mahia e matou he tātaritanga i te wa o te whakahiato kaupapa, ko te huihuinga me te tātari kia kotahi te taahiraa, no reira whakakiia te mara Tautuhi Ritenga:
Ka titiro tatou ki nga taahiraa takitahi a muri ake. He mea nui kia utaina te kaitirotiro, te whakahiato i te kaupapa, te tātari, te whakaputa i te purongo me te whakahōputu kia tekau ma tahi noa nga rarangi waehere.
Ko te mea whakamutunga hei mahi ma tatou ko te whakarite i nga taurangi taiao, i whakahuahuahia e au etahi huarahi hei whakapai ake i to raatau panui. Ki te mahi i tenei, me haere tonu: Tawhā -> Tāpiri tawhā hōu me te taapiri kia toru nga taurangi:
Ko nga mea katoa hei mahi maau ko te pehi i te paatene Whakahaere i te kokonga matau o runga. I te wa e whakaemihia ana te kaupapa me te wetewetehia, ka korero ahau ki a koe mo te tuhinga.
Tuhituhi tika
Tuatahi, me tango i te tohatoha PVS-Studio hou. Mo tenei ka whakamahia e matou te kaiwhakahaere putea Chocolatey. Mo te hunga e hiahia ana ki te mohio atu mo tenei, kei reira tetahi korero
choco install pvs-studio -y
I muri mai, me whakarewahia te kaupapa CLMonitor hanga whaipainga aroturuki.
%CLmon% monitor –-attach
Na ka hanga e matou te kaupapa hei taurangi taiao MSB Ko te ara ki te putanga o MSBuild me hanga e au
%MSB% %ProjPath% /t:clean
%MSB% %ProjPath% /t:rebuild /p:configuration=release
%MSB% %ProjPath% /t:g2
%MSB% %ProjPath% /t:PublishPortable
Whakauruhia te takiuru me te taviri raihana mo te PVS-Studio:
%PVS-Studio_cmd% credentials --username %PVS_Name% --serialNumber %PVS_Key%
Ka oti te hanga, whakahaere ano i a CLMonitor ki te whakaputa i nga konae kua oti te tukatuka me te tātari pateko:
%CLmon% analyze -l "c:ptest.plog"
Na ka whakamahia e matou tetahi atu taputapu mai i ta maatau tohatoha. Ka huri a PlogConverter i tetahi purongo mai i te whakatakotoranga paerewa ki te whakatakotoranga TeamCity-motuhake. He mihi ki tenei, ka taea e matou te tiro tika i te matapihi hanga.
%PlogConverter% "c:ptest.plog" --renderTypes=TeamCity -o "C:temp"
Ko te mahi whakamutunga ko te whakaatu i te ripoata kua whakahōputuhia ki roto stdout, i reira ka kohia e te roopu roopu TeamCity.
type "C:tempptest.plog_TeamCity.txt"
Waehere tuhi katoa:
choco install pvs-studio -y
%CLmon% monitor --attach
set platform=x64
%MSB% %ProjPath% /t:clean
%MSB% %ProjPath% /t:rebuild /p:configuration=release
%MSB% %ProjPath% /t:g2
%MSB% %ProjPath% /t:PublishPortable
%PVS-Studio_cmd% credentials --username %PVS_Name% --serialNumber %PVS_Key%
%CLmon% analyze -l "c:ptest.plog"
%PlogConverter% "c:ptest.plog" --renderTypes=TeamCity -o "C:temp"
type "C:tempptest.plog_TeamCity.txt"
I tenei wa, kua oti pai te huihuinga me te tātaritanga o te kaupapa, ka taea te haere ki te ripa kaupapa kia mohio hoki.
Inaianei me paato tatou Nga Tirohanga Tapekeki te haere ki te tiro i te purongo tātari:
Ka whakarōpūhia ngā whakatūpato mā ngā tau ture tātari. Hei whakatere i roto i te waehere, me panui koe i te nama raina me te whakatupato. Ma te panui i te tohu patai kei te kokonga matau o runga ka whakatuwhera koe i tetahi ripa hou me nga tuhinga. Ka taea hoki e koe te whakatere i roto i te waehere ma te panui i te nama raina me te whakatupato kaitirotiro. Ka taea te whakatere mai i te rorohiko mamao ina whakamahi PūtakeTreeRoot tohu. Ko nga tangata katoa e aro nui ana ki tenei momo mahi a te kaitirotiro ka taea te mohio ki te waahanga e pa ana
Te tiro i nga hua a te kaitātari
Inaianei kua oti taatau te whakatakoto me te whirihora i te hanga, me titiro ki etahi whakatupato whakamere i kitea i roto i te kaupapa e tirohia ana e tatou.
Whakatupato N1
Object* CreateObjectFromJson(....)
{
Object* result = nullptr;
....
result = CreateObject(entry);
....
if (readContext.WasError())
{
throw std::runtime_error("Object has errors");
}
....
}
Object* CreateObject(const rct_object_entry& entry)
{
Object* result;
switch (entry.GetType())
{
case OBJECT_TYPE_RIDE:
result = new RideObject(entry);
break;
case OBJECT_TYPE_SMALL_SCENERY:
result = new SmallSceneryObject(entry);
break;
case OBJECT_TYPE_LARGE_SCENERY:
result = new LargeSceneryObject(entry);
break;
....
default:
throw std::runtime_error("Invalid object type");
}
return result;
}
I kite te kaitirotiro i tetahi hapa i muri i te tohatoha o te mahara ki roto Waihanga Ahanoa, ka puta he tuunga, karekau te mahara e whakawāteahia, ka puta he turuturu mahara.
Whakatupato N2
static uint64_t window_cheats_page_enabled_widgets[] =
{
MAIN_CHEAT_ENABLED_WIDGETS |
(1ULL << WIDX_NO_MONEY) |
(1ULL << WIDX_ADD_SET_MONEY_GROUP) |
(1ULL << WIDX_MONEY_SPINNER) |
(1ULL << WIDX_MONEY_SPINNER_INCREMENT) |
(1ULL << WIDX_MONEY_SPINNER_DECREMENT) |
(1ULL << WIDX_ADD_MONEY) |
(1ULL << WIDX_SET_MONEY) |
(1ULL << WIDX_CLEAR_LOAN) |
(1ULL << WIDX_DATE_SET) |
(1ULL << WIDX_MONTH_BOX) | // <=
(1ULL << WIDX_MONTH_UP) |
(1ULL << WIDX_MONTH_DOWN) |
(1ULL << WIDX_YEAR_BOX) |
(1ULL << WIDX_YEAR_UP) |
(1ULL << WIDX_YEAR_DOWN) |
(1ULL << WIDX_DAY_BOX) |
(1ULL << WIDX_DAY_UP) |
(1ULL << WIDX_DAY_DOWN) |
(1ULL << WIDX_MONTH_BOX) | // <=
(1ULL << WIDX_DATE_GROUP) |
(1ULL << WIDX_DATE_RESET),
....
};
He iti noa nga tangata i tua atu i te kaitirotiro pateko ka taea tenei whakamatautau aro. He pai tenei tauira kape-whakapiri mo tenei take.
Whakatupato N3
struct RCT12SpriteBase
{
....
uint8_t flags;
....
};
struct rct1_peep : RCT12SpriteBase
{
....
uint8_t flags;
....
};
Ko te tikanga, ko te whakamahi i tetahi taurangi me te ingoa kotahi i roto i te akomanga turanga me te uri kaore i te he i nga wa katoa. Heoi ano, ko te hangarau tuku iho e kii ana ko nga mara katoa o te akomanga matua kei roto i te akomanga tamariki. Ma te whakapuaki i nga mara me te ingoa kotahi i roto i te tangata tuku iho, ka puta te raruraru.
Whakatupato N4
void vehicle_visual_observation_tower(...., int32_t imageDirection, ....)
{
if ((imageDirection / 8) && (imageDirection / 8) != 3)
{
....
}
....
}
Kia ata titiro tatou. Whakaaturanga atahanga Aronga/8 ka teka ki te atahanga Aronga kei te awhe mai i te -7 ki te 7. Wāhanga tuarua: (Whakaahuatanga / 8) != 3 arowhai atahanga Aronga mo te noho ki waho o te awhe: mai i te -31 ki te -24 me te 24 ki te 31. He ahua ke ki ahau ki te tirotiro i nga nama mo te whakauru ki roto i etahi awhe penei, a, ahakoa karekau he he o tenei waahanga waehere, ka tūtohu ahau kia tuhia ano enei tikanga kia tino marama ake. Ma tenei ka ngawari ake te oranga mo te hunga ka panui me te pupuri i tenei waehere.
Whakatupato N5
void process_mouse_over(....)
{
....
switch (window->widgets[widgetId].type)
{
case WWT_VIEWPORT:
ebx = 0;
edi = cursorId; // <=
// Window event WE_UNKNOWN_0E was called here,
// but no windows actually implemented a handler and
// it's not known what it was for
cursorId = edi; // <=
if ((ebx & 0xFF) != 0)
{
set_cursor(cursorId);
return;
}
break;
....
}
....
}
Ko tenei kongakonga waehere i riro mai i te wetewete. Na, ma te whakatau i te korero i mahue, ka tangohia tetahi waahanga o te waehere kore mahi. Heoi ano, e rua tonu nga mahi e toe ana cursorId, e kore hoki e tino whai tikanga.
Whakatupato N6
void Network::ProcessPlayerList()
{
....
auto* player = GetPlayerByID(pendingPlayer.Id);
if (player == nullptr)
{
// Add new player.
player = AddPlayer("", "");
if (player) // <=
{
*player = pendingPlayer;
if (player->Flags & NETWORK_PLAYER_FLAG_ISSERVER)
{
_serverConnection->Player = player;
}
}
newPlayers.push_back(player->Id); // <=
}
....
}
He tino ngawari tenei waehere ki te whakatika; me tirotiro koe i te toru o nga wa kaitākaro ki te atatohu kore, ki te taapiri atu ranei ki te tinana o te korero here. Ka whakaaro ahau ki te whiringa tuarua:
void Network::ProcessPlayerList()
{
....
auto* player = GetPlayerByID(pendingPlayer.Id);
if (player == nullptr)
{
// Add new player.
player = AddPlayer("", "");
if (player)
{
*player = pendingPlayer;
if (player->Flags & NETWORK_PLAYER_FLAG_ISSERVER)
{
_serverConnection->Player = player;
}
newPlayers.push_back(player->Id);
}
}
....
}
Whakatupato N7
std::optional<ServerListEntry> ServerListEntry::FromJson(...)
{
auto name = json_object_get(server, "name");
.....
if (name == nullptr || version == nullptr)
{
....
}
else
{
....
entry.name = (name == nullptr ? "" : json_string_value(name));
....
}
....
}
Ka taea e koe te whakakore i te rarangi waehere pakeke-ki-te-panui i te wa kotahi ka whakatau i te raru ma te tirotiro mo nullptr. Ka whakaaro ahau ki te whakarereke i te waehere penei:
std::optional<ServerListEntry> ServerListEntry::FromJson(...)
{
auto name = json_object_get(server, "name");
.....
if (name == nullptr || version == nullptr)
{
name = ""
....
}
else
{
....
entry.name = json_string_value(name);
....
}
....
}
Whakatupato N8
void CustomListView::MouseUp(....)
{
....
if (!ColumnHeaderPressedCurrentState)
{
ColumnHeaderPressed = std::nullopt;
ColumnHeaderPressedCurrentState = false;
Invalidate();
}
}
He rereke te ahua o te waehere. Ki taku whakaaro i puta he hapa i roto i te ahuatanga, i te wa ranei e tautapa ana te taurangi ColumnHeaderPressedCurrentState tikanga teka.
mutunga
Kei te kite tatou, he ngawari noa te whakauru i te kaitirotiro pateko PVS-Studio ki to kaupapa TeamCity. Ki te mahi i tenei, he nui noa te tuhi i tetahi konae whirihoranga iti. Ko te tirotiro i te waehere ka taea e koe te tautuhi i nga raruraru i muri tonu i te huihuinga, ka awhina i te whakakore i te wa e iti tonu ana te uaua me te utu o nga huringa.
Mena kei te pirangi koe ki te tiri i tenei tuhinga ki te hunga whakarongo ki te reo Ingarihi, whakamahia te hononga whakamaori: Vladislav Stolyarov.
Source: will.com