C#-เดจเดพเดฏเดฟ PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต GitLab-เดฒเต† เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚

C#-เดจเดพเดฏเดฟ PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต GitLab-เดฒเต† เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚
GitLab เด‡เดทเตเดŸเดชเตเดชเต†เดŸเตเด•เดฏเตเด‚ เดฌเด—เตเด•เดณเต† เดตเต†เดฑเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเตเดฃเตเดŸเต‹? เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเต‹เดดเตเดธเต เด•เต‹เดกเดฟเดจเตเดฑเต† เด—เตเดฃเดจเดฟเดฒเดตเดพเดฐเด‚ เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเดฃเต‹? เด…เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพ เดถเดฐเดฟเดฏเดพเดฏ เดธเตเดฅเดฒเดคเตเดคเต เดŽเดคเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต PVS-Studio C# เด…เดจเดฒเตˆเดธเตผ เดŽเด™เตเด™เดจเต† เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเดพเดฎเต†เดจเตเดจเต เด‡เดจเตเดจเต เดžเด™เตเด™เตพ เดจเดฟเด™เตเด™เดณเต‹เดŸเต เดชเดฑเดฏเตเด‚. เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เดฏเตเดฃเดฟเด•เต‹เตบ เดฎเดพเดจเดธเดฟเด•เดพเดตเดธเตเดฅเดฏเตเด‚ เดธเดจเตเดคเต‹เดทเด•เดฐเดฎเดพเดฏ เดตเดพเดฏเดจเดฏเตเด‚ เดจเต‡เดฐเตเดจเตเดจเต.

เดชเดฟเดตเดฟเดŽเดธเต-เดธเตเดฑเตเดฑเตเดกเดฟเดฏเต‹ C, C++, C#, Java เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดŽเดดเตเดคเดฟเดฏ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เดณเตเดŸเต† เดธเต‹เดดเตเดธเต เด•เต‹เดกเดฟเดฒเต† เดชเดฟเดถเด•เตเด•เดณเตเด‚ เดธเดพเดงเตเดฏเดคเดฏเตเดณเตเดณ เด•เต‡เดŸเตเดชเดพเดŸเตเด•เดณเตเด‚ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด‰เดชเด•เดฐเดฃเดฎเดพเดฃเต. Windows, Linux, macOS เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† 64-เดฌเดฟเดฑเตเดฑเต เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต. 32-เดฌเดฟเดฑเตเดฑเต, 64-เดฌเดฟเดฑเตเดฑเต, เด‰เตพเดšเตเดšเต‡เตผเดคเตเดค ARM เดชเตเดฒเดพเดฑเตเดฑเตโ€Œเดซเต‹เดฎเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตโ€Œเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด•เต‹เดกเต เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚.

เดตเดดเดฟเดฏเดฟเตฝ, เดžเด™เตเด™เตพ PVS-Studio 7.08 เดชเตเดฑเดคเตเดคเดฟเดฑเด•เตเด•เดฟ, เด…เดคเดฟเตฝ เดžเด™เตเด™เตพ เด’เดฐเตเดชเดพเดŸเต เด•เดพเดฐเตเดฏเด™เตเด™เตพ เดšเต†เดฏเตเดคเต เดฐเดธเด•เดฐเดฎเดพเดฏ. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต:

  • เดฒเดฟเดจเด•เตเดธเดฟเดจเตเด‚ เดฎเดพเด•เต‹เดธเดฟเดจเตเด‚ เดธเดฟ# เด…เดจเดฒเตˆเดธเตผ;
  • เดฑเตˆเดกเดฑเดฟเดจเดพเดฏเตเดณเตเดณ เดชเตเดฒเด—เดฟเตป;
  • เดชเตเดคเดฟเดฏ เดซเดฏเตฝ เดฒเดฟเดธเตเดฑเตเดฑเต เดšเต†เด•เตเด•เดฟเด‚เด—เต เดฎเต‹เดกเต.

เดซเดฏเตฝ เดฒเดฟเดธเตเดฑเตเดฑเต เดšเต†เด•เตเด•เดฟเด‚เด—เต เดฎเต‹เดกเต

เดฎเตเดฎเตเดชเต, เดšเดฟเดฒ เดซเดฏเดฒเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด…เดจเดฒเตˆเดธเดฑเดฟเดจเต เดซเดฏเดฒเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดธเดนเดฟเดคเด‚ เด’เดฐเต .xml เด•เตˆเดฎเดพเดฑเต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เดตเดณเดฐเต† เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดฒเตเดฒเดพเดคเตเดคเดคเดฟเดจเดพเตฝ, .txt เด•เตˆเดฎเดพเดฑเดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต เดžเด™เตเด™เตพ เดšเต‡เตผเดคเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต, เด‡เดคเต เดœเต€เดตเดฟเดคเด‚ เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต.

เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดซเดฏเดฒเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ เดซเตเดฒเดพเด—เต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฃเด‚ --sourceFiles (-f) เด•เต‚เดŸเดพเดคเต† เดซเดฏเดฒเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดธเดนเดฟเดคเด‚ .txt เด•เตˆเดฎเดพเดฑเตเด•. เด‡เดคเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json

เด•เดฎเตเดฎเดฟเดฑเตเดฑเต เดšเต†เด•เตเด•เดฟเด‚เด—เต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เดพเดจเต‹ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดชเดฟเตปเดตเดฒเดฟเด•เตเด•เดพเดจเต‹ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดˆ เดฎเต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เดคเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚. เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดซเดฏเดฒเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดจเต‡เดŸเตเดจเตเดจเดคเดฟเดฒเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ เดตเตเดฏเดคเตเดฏเดพเดธเด‚, เดจเดฟเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเต† เด†เดถเตเดฐเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเด‚.

เด’เดฐเต เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดคเดคเตเดตเด‚

เดฒเดฏเดจ เดธเดฎเดฏเดคเตเดคเต เด…เดจเดฒเตˆเดธเตผ เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏ เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เด…เดคเดฟเตฝ เดตเต€เดดเตเดจเตเดจเดฟเดฒเตเดฒเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดšเต†เด•เตเด•เดฟเดจเตเดฑเต† เดชเตเดฐเดงเดพเดจ เดธเดพเดฐเดพเด‚เดถเด‚. เดฏเดœเดฎเดพเดจเดจเต เดถเดพเด–. เดŽเดฒเตเดฒเดพ เดธเดฎเดฏเดคเตเดคเตเด‚ เดฎเตเดดเตเดตเตป เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเดพเตป เดžเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดฌเตเดฐเดพเดžเตเดšเตเด•เตพ เดฒเดฏเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดจเดฎเตเด•เตเด•เต เดฎเดพเดฑเดฟเดฏ เดซเดฏเดฒเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เด‰เดฃเตเดŸเต. เด…เดคเดฟเดจเดพเตฝ, เด’เดฐเต เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดชเดฐเดฟเดถเต‹เดงเดจ เดšเต‡เตผเด•เตเด•เดพเตป เดžเดพเตป เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเดจเตเดจเต.

เด’เดฐเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด…เดจเดฒเตˆเดธเตผ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เด’เดฐเต เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด‡เด™เตเด™เดจเต†เดฏเดพเดฃเต เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเดคเต:

C#-เดจเดพเดฏเดฟ PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต GitLab-เดฒเต† เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚
เด…เดคเดพเดฏเดคเต, เดถเดพเด–เดฏเดฟเตฝ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจ เดŽเดฒเตเดฒเดพ เดชเดฟเดดเดตเตเด•เดณเตเด‚ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ, เดฎเดพเดธเตเดฑเตเดฑเตผ เดฌเตเดฐเดพเดžเตเดšเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเด‚. เดžเด™เตเด™เตพเด•เตเด•เต เด‡เดคเต เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒเดพเดคเตเดคเดคเดฟเดจเดพเตฝ, เดžเด™เตเด™เตพ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต, เด‡เดชเตเดชเต‹เตพ เดกเดฏเด—เตเดฐเด‚ เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

C#-เดจเดพเดฏเดฟ PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต GitLab-เดฒเต† เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚
เดžเด™เตเด™เตพ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดฎเดพเดฑเตเดฑเด™เตเด™เตพ2 เด•เต‚เดŸเดพเดคเต†, เดชเดฟเดถเด•เตเด•เดณเตŠเดจเตเดจเตเดฎเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดžเด™เตเด™เตพ เด…เด‚เด—เต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดฒเตเดฒเดพเดคเตเดคเดชเด•เตเดทเด‚ เดžเด™เตเด™เตพ เด…เดคเต เดจเดฟเดฐเดธเดฟเด•เตเด•เตเดจเตเดจเต.

เดตเดดเดฟเดฏเดฟเตฝ, C/C++ เดŽเดจเตเดจเดคเดฟเดจเดพเดฏเตเดณเตเดณ เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เตพ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดชเดฟเตปเดตเดฒเดฟเด•เตเด•เดพเดจเตเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดตเดพเดฏเดฟเด•เตเด•เดพเด‚ เด‡เดตเดฟเดŸเต†.

GitLab

GitLab เด’เดฐเต เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเต เดตเต†เดฌเต เด…เดงเดฟเดทเตโ€Œเด เดฟเดค DevOps เดฒเตˆเดซเต เดธเตˆเด•เตเด•เดฟเตพ เดŸเต‚เดณเดพเดฃเต, เด…เดคเต Git-เดจเต เดธเตเดตเดจเตเดคเด‚ เดตเดฟเด•เตเด•เดฟ, เด‡เดทเตเดฏเต‚ เดŸเตเดฐเดพเด•เตเด•เดฟเด‚เด—เต เดธเดฟเดธเตเดฑเตเดฑเด‚, CI/CD เดชเตˆเดชเตเดชเตโ€Œเดฒเตˆเตป, เดฎเดฑเตเดฑเต เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเตเดณเตเดณ เด’เดฐเต เด•เต‹เดกเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ เดฎเดพเดจเต‡เดœเตโ€Œเดฎเต†เดจเตเดฑเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เดจเตฝเด•เตเดจเตเดจเต.

เดจเดฟเด™เตเด™เตพ เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเดพเตป เดคเตเดŸเด™เตเด™เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดฎเตเดชเต, เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดคเต เด…เดชเตโ€Œเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด‡เดคเต เดŽเด™เตเด™เดจเต† เดšเต†เดฏเตเดฏเดฃเดฎเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เดฑเดฟเดฏเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดžเดพเตป เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเดจเตเดจเต เด’เดฐเต เดฒเต‡เด–เดจเด‚ เดŽเดจเตเดฑเต† เดธเดนเดชเตเดฐเดตเตผเดคเตเดคเด•เตป.

เด…เดญเดฟเดชเดพเดฏเดชเตเดชเต†เดŸเตเด•. เดคเดพเดดเต† เดตเดฟเดตเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เดฐเต€เดคเดฟ เดธเดพเดงเตเดฏเดฎเดพเดฏ เด’เดจเตเดจเดพเดฃเต. เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเตเด‚ เด…เดจเดฒเตˆเดธเตผ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฏ เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด˜เดŸเตเดŸเด™เตเด™เตพ เด•เดพเดฃเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดฒเด•เตเดทเตเดฏเด‚. เด’เดฐเตเดชเด•เตเดทเต‡ เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เดฒเดฟเดจเตเดฑเต†เดฏเตเด‚ (เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเด•เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต†เดฏเตเด‚ เด’เดฐเต เด…เดจเดฒเตˆเดธเตผ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดฑเต†เดฏเตเด‚) เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเตเดฑเต†เดฏเตเด‚ เด˜เดŸเตเดŸเด™เตเด™เตพ เดตเต‡เตผเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เด•เต‚เดŸเตเดคเตฝ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเด•เตเด‚: เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด†เดตเดถเตเดฏเดฎเดพเดฏ เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเตฝ เดกเต‹เด•เตเด•เตผ เด‡เดฎเต‡เดœเตเด•เตพ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เดฟ เด…เดต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเดฑเตเดฑเต‡เดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดฐเต€เดคเดฟ.

เด‡เดชเตเดชเต‹เตพ เดŽเดจเตเดคเดพเดฃเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดจเต เดจเดจเตเดจเดพเดฏเดฟ เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดพเตป, เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดกเดฏเด—เตเดฐเด‚ เดจเต‹เด•เตเด•เดพเตป เดžเดพเตป เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเดจเตเดจเต:

C#-เดจเดพเดฏเดฟ PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต GitLab-เดฒเต† เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚
เด…เดจเดฒเตˆเดธเดฑเดฟเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป .NET เด•เต‹เตผ SDK 3 เด†เดตเดถเตเดฏเดฎเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เด…เดจเดฒเตˆเดธเตผ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เดจเดฟเด™เตเด™เตพ เด…เดจเดฒเตˆเดธเดฑเดฟเดจเต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดกเดฟเดชเตปเดกเตปเดธเดฟเด•เตพ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจ Microsoft เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเด•เตพ เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดตเดฟเดตเดฟเดง เดฒเดฟเดจเด•เตเดธเต เดตเดฟเดคเดฐเดฃเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ Microsoft repositories เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต เด…เดจเตเดฌเดจเตเดง เดชเตเดฐเดฎเดพเดฃเดคเตเดคเดฟเตฝ เดตเดฟเดตเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดชเดพเด•เตเด•เต‡เดœเต เดฎเดพเดจเต‡เดœเตผ เดตเดดเดฟ PVS-Studio เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดพเตป, เดจเดฟเด™เตเด™เตพ PVS-Studio เดถเต‡เด–เดฐเดฃเด™เตเด™เดณเตเด‚ เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดตเตเดฏเดคเตเดฏเดธเตเดค เดตเดฟเดคเดฐเดฃเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดถเต‡เด–เดฐเดฃเด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเต เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเตเดฑเต† เดชเตเดฐเดธเด•เตเดคเดฎเดพเดฏ เดตเดฟเดญเดพเด—เด‚.

เด…เดจเดฒเตˆเดธเดฑเดฟเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดฒเตˆเดธเตปเดธเต เด•เต€ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดŽเดจเตเดจเดคเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŸเตเดฐเดฏเตฝ เดฒเตˆเดธเตปเดธเต เดฒเดญเดฟเด•เตเด•เตเด‚ เด…เดจเดฒเตˆเดธเตผ เดกเต—เตบเดฒเต‹เดกเต เดชเต‡เดœเต.

เด…เดญเดฟเดชเดพเดฏเดชเตเดชเต†เดŸเตเด•. เดตเดฟเดตเดฐเดฟเดšเตเดš เดชเตเดฐเดตเตผเดคเตเดคเดจ เดฐเต€เดคเดฟเด•เตเด•เต (เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚) เด’เดฐเต เดŽเดจเตเดฑเตผเดชเตเดฐเตˆเดธเต เดฒเตˆเดธเตปเดธเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต†เดจเตเดจเต เดฆเดฏเดตเดพเดฏเดฟ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด•. เด…เดคเดฟเดจเดพเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจ เดฐเต€เดคเดฟ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดพเตป เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดŽเดจเตเดฑเตผเดชเตเดฐเตˆเดธเต เดฒเตˆเดธเตปเดธเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต†เดจเตเดจเต "เดธเดจเตเดฆเต‡เดถเด‚" เดซเต€เตฝเดกเดฟเตฝ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดฎเดฑเด•เตเด•เดฐเตเดคเต.

เด’เดฐเต เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดธเด‚เดญเดตเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพ เดฎเดพเดฑเตเดฑเดฟเดฏ เดซเดฏเดฒเตเด•เดณเตเดŸเต† เดฒเดฟเดธเตเดฑเตเดฑเต เดฎเดพเดคเตเดฐเด‚ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด…เดฒเตเดฒเดพเดคเตเดคเดชเด•เตเดทเด‚ เดžเด™เตเด™เตพ เดŽเดฒเตเดฒเดพ เดซเดฏเดฒเตเด•เดณเตเด‚ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเด‚. เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเต เดถเต‡เดทเด‚, เดจเดฎเตเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดฒเต‹เด—เตเด•เตพ เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เด‡เดชเตเดชเต‹เตพ, เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เตบเดฎเตเดจเตเดจเดฟเตฝ เดœเต‹เดฒเดฟเดฏเตเดŸเต† เด…เตฝเด—เต‹เดฐเดฟเดคเด‚ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดŽเดดเตเดคเดพเตป เดชเต‹เด•เดพเด‚. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ เดซเดฏเตฝ เดฎเดพเดฑเตเดฑเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต .gitlab-ci.yml เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เดจเดฟเดฒเดตเดฟเดฒเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•. เด‡เดคเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป, เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เดชเต‡เดฐเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เต เดšเต†เดฏเตเดฏเดฃเด‚ -> CI/CD เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเด•.

C#-เดจเดพเดฏเดฟ PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต GitLab-เดฒเต† เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚
เด‡เดชเตเดชเต‹เตพ เดžเด™เตเด™เตพ เดคเดฟเดฐเด•เตเด•เดฅ เดŽเดดเตเดคเดพเตป เดคเดฏเตเดฏเดพเดฑเดพเดฃเต. เด…เดจเดฒเตˆเดธเตผ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดฒเตˆเดธเตปเดธเต เดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เด•เต‹เดกเต เด†เดฆเตเดฏเด‚ เดŽเดดเตเดคเดพเด‚:

before_script:
  - apt-get update && apt-get -y install wget gnupg 

  - apt-get -y install git
  - wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
  - dpkg -i packages-microsoft-prod.deb
  - apt-get update
  - apt-get install apt-transport-https
  - apt-get update
  
  - wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
  - wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
  - apt-get update
  - apt-get -y install pvs-studio-dotnet

  - pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
  - dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln

เดฎเดฑเตเดฑเต†เดฒเตเดฒเดพ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพเด•เตเด•เตเด‚ เดฎเตเดฎเตเดชเดพเดฏเดฟ เด‡เตปเดธเตเดฑเตเดฑเดพเดณเต‡เดทเดจเตเด‚ เดธเดœเต€เดตเดฎเดพเด•เตเด•เดฒเตเด‚ เดธเด‚เดญเดตเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดจเดพเตฝ, เดžเด™เตเด™เตพ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดฒเต‡เดฌเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เดฎเตเดฎเตเดชเต_เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต. เดˆ เดถเด•เดฒเด‚ เด…เดฒเตเดชเด‚ เดตเดฟเดถเดฆเต€เด•เดฐเดฟเด•เตเด•เดพเด‚.

เด…เดจเดฒเตˆเดธเตผ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดพเตป เดคเดฏเตเดฏเดพเดฑเต†เดŸเตเด•เตเด•เตเดจเตเดจเต:

  - wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
  - dpkg -i packages-microsoft-prod.deb
  - apt-get update
  - apt-get install apt-transport-https
  - apt-get update

PVS-Studio เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเด•เดณเตเด‚ เด…เดจเดฒเตˆเดธเดฑเตเด‚ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต:

  - wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
  - wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
  - apt-get update
  - apt-get -y install pvs-studio-dotnet

เดฒเตˆเดธเตปเดธเต เดธเดœเต€เดตเดฎเดพเด•เตเด•เตฝ:

  - pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY

$PVS_NAME - เด‰เดชเดฏเต‹เด•เตเดคเตƒเดจเดพเดฎเด‚.

$PVS_KEY - เด‰เดฒเตเดชเดจเตเดจเดคเดพเด•เตเด•เต‡เดพเตฝ.

เดŽเดตเดฟเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดกเดฟเดชเตปเดกเตปเดธเดฟเด•เตพ เดตเต€เดฃเตเดŸเต†เดŸเตเด•เตเด•เตเดจเตเดจเต $CI_PROJECT_DIR - เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดฎเตเดดเตเดตเตป เดชเดพเดค:

  - dotnet restore "$CI_PROJECT_DIR"/Path/To/Solution.sln

เดถเดฐเดฟเดฏเดพเดฏ เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ, เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏเดฟ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เดกเดฟเดชเตปเดกเตปเดธเดฟเด•เตพ เดชเตเดจเดƒเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดตเต‡เดฃเด‚ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด†เดตเดถเตเดฏเดฎเดพเดฏ NuGet เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดฃเด‚).

เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฒเตˆเดธเตปเดธเต เดตเดฟเดตเดฐเด™เตเด™เตพ เด…เดŸเด™เตเด™เดฟเดฏ เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด‚, เด…เดคเดฟเดจเตเดถเต‡เดทเดตเตเด‚ เดธเดฟเด/เดธเดฟเดกเดฟ.

C#-เดจเดพเดฏเดฟ PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต GitLab-เดฒเต† เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚
เดคเตเดฑเด•เตเด•เตเดจเตเดจ เดตเดฟเตปเดกเต‹เดฏเดฟเตฝ, เด‡เดจเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเตเด• เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ, เดตเดฒเดคเตเดตเดถเดคเตเดคเตเดณเตเดณ เดฌเดŸเตเดŸเดฃเดฟเตฝ เด•เตเดฒเดฟเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด• เดตเดฟเดชเตเดฒเต€เด•เดฐเดฟเด•เตเด•เตเด• เด•เต‚เดŸเดพเดคเต† เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เดšเต‡เตผเด•เตเด•เตเด•. เดซเดฒเด‚ เด‡เดคเตเดชเต‹เดฒเต† เด†เดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚:

C#-เดจเดพเดฏเดฟ PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต GitLab-เดฒเต† เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚
เด‡เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เดพเด‚. เด†เดฆเตเดฏเด‚, เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เด’เดฐเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดšเต‡เตผเด•เตเด•เดพเด‚. เดชเดคเดพเด•เดฏเดฟเดฒเต‡เด•เตเด•เต -t เดชเดคเดพเด•เดฏเตเดŸเต† เดชเดฐเดฟเดนเดพเดฐเดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดค เดžเด™เตเด™เตพ เด•เดŸเดจเตเดจเตเดชเต‹เด•เตเดจเตเดจเต -o เดตเดฟเดถเด•เดฒเดจ เดซเดฒเด™เตเด™เตพ เดŽเดดเตเดคเตเดจเตเดจ เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดค เดŽเดดเตเดคเตเด•. เดฑเดฟเดŸเตเดŸเต‡เตบ เด•เต‹เดกเดฟเดฒเตเด‚ เดžเด™เตเด™เตพเด•เตเด•เต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต. เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดฑเดฟเดŸเตเดŸเต‡เตบ เด•เต‹เดกเดฟเตฝ เดตเดฟเดถเด•เดฒเดจ เดธเดฎเดฏเดคเตเดคเต เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเตเด•เตพ เดจเตฝเด•เดฟเดฏ เดตเดฟเดตเดฐเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดจเดฟเตผเดคเตเดคเตเดจเตเดจเดคเดฟเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต. เดˆ เดถเด•เดฒเด‚ เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

job:
  script:
  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o 
PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi

เดฑเดฟเดŸเตเดŸเต‡เตบ เด•เต‹เดกเตเด•เตพ เด’เดฐเต เดฌเดฟเดฑเตเดฑเต เดฎเดพเดธเตเด•เดฟเดจเตเดฑเต† เดคเดคเตเดตเดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเตเดฑเต† เดซเดฒเดฎเดพเดฏเดฟ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเตเด•เตพ เดจเตฝเด•เดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดฑเดฟเดŸเตเดŸเต‡เตบ เด•เต‹เดกเต 8 เดจเต เดคเตเดฒเตเดฏเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เดฒเตˆเดธเตปเดธเต เด’เดฐเต เดฎเดพเดธเดคเตเดคเดฟเดจเตเดณเตเดณเดฟเตฝ เด•เดพเดฒเดนเดฐเดฃเดชเตเดชเต†เดŸเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดฑเดฟเดŸเตเดŸเต‡เตบ เด•เต‹เดกเต 4 เดจเต เดคเตเดฒเตเดฏเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เดตเดฟเดถเด•เดฒเดจ เดธเดฎเดฏเดคเตเดคเต เดชเดฟเดถเด•เตเด•เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดพเตฝ, เด’เดฐเต เดฎเดพเดธเดคเตเดคเดฟเดจเตเดณเตเดณเดฟเตฝ เดฒเตˆเดธเตปเดธเต เด•เดพเดฒเดนเดฐเดฃเดชเตเดชเต†เดŸเตเด‚, เด•เต‹เดกเต เดฑเดฟเดŸเตเดŸเต‡เตบ, เดฐเดฃเตเดŸเต เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเด‚ เดŽเดดเตเดคเดชเตเดชเต†เดŸเตเด‚: เด…เด•เตเด•เด™เตเด™เตพ เด’เดฐเตเดฎเดฟเดšเตเดšเต เดšเต‡เตผเดคเตเดคเต เด…เดจเตเดคเดฟเดฎ เดฑเดฟเดŸเตเดŸเต‡เตบ เด•เต‹เดกเต เดจเต‡เดŸเตเด• - 8+4=12. เด…เดคเดฟเดจเดพเตฝ, เด…เดจเตเดฌเดจเตเดง เดฌเดฟเดฑเตเดฑเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†, เดตเดฟเดถเด•เดฒเดจ เดธเดฎเดฏเดคเตเดคเต เดตเดฟเดตเดฟเดง เดธเด‚เดธเตเดฅเดพเดจเด™เตเด™เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เดฒเดญเดฟเด•เตเด•เตเด‚. เดฑเดฟเดŸเตเดŸเต‡เตบ เด•เต‹เดกเตเด•เตพ เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเดฟเดจเตเดฑเต† "pvs-studio-dotnet (Linux / macOS) เดฑเดฟเดŸเตเดŸเต‡เตบ เด•เต‹เดกเตเด•เตพ" เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต "PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เดฎเดพเตปเดกเต เดฒเตˆเดจเดฟเตฝ เดจเดฟเดจเตเดจเต Visual Studio / MSBuild / .NET เด•เต‹เตผ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต".

เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, 8 เดฆเตƒเดถเตเดฏเดฎเดพเด•เตเดจเตเดจ เดŽเดฒเตเดฒเดพ เดฑเดฟเดŸเตเดŸเต‡เตบ เด•เต‹เดกเตเด•เดณเดฟเดฒเตเด‚ เดžเด™เตเด™เตพเด•เตเด•เต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต.

  - exit_code=$((($exit_code & 8)/8))

เดฑเดฟเดŸเตเดŸเต‡เตบ เด•เต‹เดกเดฟเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดณเตเดณ เดธเด‚เด–เตเดฏเดฏเตเดŸเต† เดฌเดฟเดฑเตเดฑเต เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดจเดฎเตเด•เตเด•เต 1 เดฒเดญเดฟเด•เตเด•เตเด‚, เด…เดฒเตเดฒเดพเดคเตเดคเดชเด•เตเดทเด‚ เดจเดฎเตเด•เตเด•เต 0 เดฒเดญเดฟเด•เตเด•เตเด‚.

เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต‡เตผเด•เตเด•เดพเดจเตเดณเตเดณ เดธเดฎเดฏเดฎเดพเดฃเดฟเดคเต. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต, เดจเดฎเตเด•เตเด•เต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต เดธเตเดฅเดฒเด‚ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เดพเด‚. เด’เดฐเต เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด‰เดฃเตเดŸเดพเด•เตเดฎเตเดชเต‹เตพ เดฎเดพเดคเตเดฐเดฎเต‡ เดžเด™เตเด™เตพเด•เตเด•เต เด…เดคเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเดตเต‚. เด‡เดคเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเดจเตเดจเต:

merge:
  script:
  only:
  - merge_requests

เดจเดฎเตเด•เตเด•เต เดคเดฟเดฐเด•เตเด•เดฅเดฏเดฟเดฒเต‡เด•เตเด•เต เดคเดจเตเดจเต† เดชเต‹เด•เดพเด‚. เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเต เด’เดจเตเดจเตเด‚ เด…เดฑเดฟเดฏเดฟเดฒเตเดฒ เดŽเดจเตเดจ เดตเดธเตเดคเตเดค เดžเดพเตป เด…เดญเดฟเดฎเตเด–เต€เด•เดฐเดฟเดšเตเดšเต เด‰เดคเตเดญเดตเด‚/เดฎเดพเดธเตเดฑเตเดฑเตผ. เด…เดคเดฟเดจเดพเตฝ เดจเดฎเตเด•เตเด•เต เด…เดตเดณเต† เด•เตเดฑเดšเตเดšเต เดธเดนเดพเดฏเดฟเด•เตเด•เดพเด‚:

  - git fetch origin

เด‡เดชเตเดชเต‹เตพ เดจเดฎเตเด•เตเด•เต เดถเดพเด–เด•เตพ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดตเตเดฏเดคเตเดฏเดพเดธเด‚ เดฒเดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดซเดฒเด‚ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต txt เดฒเตเดณเตเดณ เดซเดฏเตฝ:

  - git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt

เดŽเดตเดฟเดŸเต†เดฏเดพเดฃเต $CI_COMMIT_SHA - เด…เดตเดธเดพเดจ เด•เดฎเตเดฎเดฟเดฑเตเดฑเดฟเดจเตเดฑเต† เดนเดพเดทเต.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดžเด™เตเด™เตพ เดซเตเดฒเดพเด—เต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดซเดฏเดฒเตเด•เดณเตเดŸเต† เดฒเดฟเดธเตเดฑเตเดฑเต เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเดพเตป เดคเตเดŸเด™เตเด™เตเดจเตเดจเต -f. เดฎเตเดฎเตเดชเต เดฒเดญเดฟเดšเตเดš .txt เดซเดฏเตฝ เดžเด™เตเด™เตพ เด…เดคเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเดฑเตเดจเตเดจเต. เดถเดฐเดฟ, เดชเต‚เตผเดฃเตเดฃ เดตเดฟเดถเด•เดฒเดจเดตเตเดฎเดพเดฏเดฟ เดธเดพเดฎเตเดฏเดฎเตเดณเตเดณเดคเดฟเดจเดพเตฝ, เดžเด™เตเด™เตพ เดฑเดฟเดŸเตเดŸเต‡เตบ เด•เต‹เดกเตเด•เตพ เดจเต‹เด•เตเด•เตเดจเตเดจเต:

  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f 
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi

เด’เดฐเต เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เด‡เดคเตเดชเต‹เดฒเต† เด•เดพเดฃเดชเตเดชเต†เดŸเตเด‚:

merge:
  script:
  - git fetch origin
  - git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f 
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
  only:
  - merge_requests

เดŽเดฒเตเดฒเดพ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เดณเตเด‚ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดคเดคเดฟเดจเต เดถเต‡เดทเด‚ เดฒเต‹เด—เต เด•เตบเดตเต‡เตผเดทเตป เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเต เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เด…เดตเดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเดคเต. เดžเด™เตเด™เตพ เดฒเต‡เดฌเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต after_script เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเดฏเตเด‚ เดชเตเดฒเด—เต-เด•เตบเดตเต†เตผเดŸเตเดŸเตผ:

after_script:
  - plog-converter -t html -o eLog ./PVS-Studio.json

เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ เดชเตเดฒเด—เต-เด•เตบเดตเต†เตผเดŸเตเดŸเตผ เดชเดพเดดเตโ€Œเดธเตผ เดชเดฟเดถเด•เต เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ HTML เดชเต‹เดฒเตเดณเตเดณ เดตเดฟเดตเดฟเดง เดฐเต‚เดชเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเดพเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดพเดฃเต. เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเดฏเตเดŸเต† เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏ เดตเดฟเดตเดฐเดฃเด‚ "เดชเตเดฒเต‹เด—เต เด•เตบเดตเต†เตผเดŸเตเดŸเตผ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟ" เดŽเดจเตเดจ เด‰เดชเดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ เดจเตฝเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเตเดฑเต† เดชเตเดฐเดธเด•เตเดคเดฎเดพเดฏ เดตเดฟเดญเดพเด—เด‚.

เดเดกเดฟเด‡เดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดฎเดพเดฏเดฟ .json เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพ เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเดจเตเดจเต เดชเตเดฒเด—เดฟเตป IDE เดฑเตˆเดกเดฑเดฟเดจเดพเดฏเดฟ. เด‡เดคเดฟเดจเตเดฑเต† เด‰เดชเดฏเต‹เด—เด‚ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดตเดฟเดตเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดชเตเดฐเดธเด•เตเดคเดฎเดพเดฏ เดชเตเดฐเดฎเดพเดฃเด‚.

เดธเต—เด•เดฐเตเดฏเดพเตผเดคเตเดฅเด‚, เด‡เดคเดพ .gitlab-ci.yml เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเดฟ:

image: debian

before_script:
  - apt-get update && apt-get -y install wget gnupg 

  - apt-get -y install git
  - wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
  - dpkg -i packages-microsoft-prod.deb
  - apt-get update
  - apt-get install apt-transport-https
  - apt-get update
  
  - wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
  - wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
  - apt-get update
  - apt-get -y install pvs-studio-dotnet

  - pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
  - dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln

merge:
  script:
  - git fetch origin
  - git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f 
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
  only:
  - merge_requests

job:
  script:
  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o 
PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
  
after_script:
  - plog-converter -t html -o eLog ./PVS-Studio.json

เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เดŽเดฒเตเดฒเดพเด‚ เดšเต‡เตผเดคเตเดคเตเด•เดดเดฟเดžเตเดžเดพเตฝ, เด•เตเดฒเดฟเด•เตเด•เตเดšเต†เดฏเตเดฏเตเด• เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดตเดฐเตเดคเตเดคเตเด•. เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฃเต†เดจเตเดจเต เด•เดพเดฃเตเดจเตเดจเดคเดฟเดจเต, เดชเต‹เด•เตเด• เดธเดฟเด / เดธเดฟเดกเดฟ -> เดชเตˆเดชเตเดชเตเดฒเตˆเดจเตเด•เตพ -> เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ. เด’เดฐเต เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เตป เดตเดฟเตปเดกเต‹ เดคเตเดฑเด•เตเด•เตเด‚, เด…เดคเดฟเดจเตเดฑเต† เด…เดตเดธเดพเดจเด‚ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚:

C#-เดจเดพเดฏเดฟ PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต GitLab-เดฒเต† เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚
เด•เดฃเตเดŸเต เดœเต‹เดฌเต เดตเดฟเดœเดฏเดฟเดšเตเดšเต - เดตเดฟเดœเดฏเด‚, เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฃเต. เดจเดฟเด™เตเด™เตพ เดŽเดจเตเดคเดพเดฃเต เดšเต†เดฏเตเดคเดคเต†เดจเตเดจเต เด‡เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเด‚.

เดœเต‹เดฒเดฟเดฏเตเดŸเต† เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ

เดœเต‹เดฒเดฟเดฏเตเดŸเต† เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ, เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเด‚ (เด‡เตป เดฏเดœเดฎเดพเดจเดจเต) เด…เดคเดฟเตฝ เดจเดฟเดฐเดตเดงเดฟ เดซเดฏเดฒเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เด…เดคเดฟเดจเตเดถเต‡เดทเด‚, เดฎเดฑเตเดฑเตŠเดฐเต เดฌเตเดฐเดพเดžเตเดšเดฟเตฝ เดžเด™เตเด™เตพ เด’เดฐเต เดซเดฏเตฝ เดฎเดพเดคเตเดฐเด‚ เดฎเดพเดฑเตเดฑเดฟ เด’เดฐเต เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดŸเดคเตเดคเดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเด‚.

เดจเดฎเตเด•เตเด•เต เดฐเดฃเตเดŸเต เด•เต‡เดธเตเด•เตพ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เดพเด‚: เดชเดฐเดฟเดทเตเด•เดฐเดฟเดšเตเดš เดซเดฏเดฒเดฟเตฝ เด’เดฐเต เดชเดฟเดถเด•เต เด‰เดณเตเดณเดชเตเดชเต‹เตพ เด…เดคเต เด‡เดฒเตเดฒเดพเดคเตเดคเดชเตเดชเต‹เตพ. เด†เดฆเตเดฏเด‚, เด’เดฐเต เดชเดฟเดถเด•เตเดณเตเดณ เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚.

เดฎเดพเดธเตเดฑเตเดฑเตผ เดฌเตเดฐเดพเดžเตเดšเดฟเตฝ เด’เดฐเต เดซเดฏเตฝ เด‰เดฃเตเดŸเต†เดจเตเดจเต เดชเดฑเดฏเดพเด‚ Program.cs, เด…เดคเดฟเตฝ เดชเดฟเดถเด•เตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ, เดŽเดจเตเดจเดพเตฝ เดฎเดฑเตเดฑเตŠเดฐเต เดฌเตเดฐเดพเดžเตเดšเดฟเตฝ เดกเต†เดตเดฒเดชเตเดชเตผ เดคเต†เดฑเตเดฑเดพเดฏ เด•เต‹เดกเต เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เด’เดฐเต เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดŸเดคเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด…เดตเตป เดŽเดจเตเดคเต เดคเต†เดฑเตเดฑเต เดšเต†เดฏเตเดคเต เดŽเดจเตเดจเดคเต เด…เดคเตเดฐ เดชเตเดฐเดงเดพเดจเดฎเดฒเตเดฒ, เดชเตเดฐเดงเดพเดจ เด•เดพเดฐเตเดฏเด‚ เด…เดคเต เดจเดฟเดฒเดตเดฟเดฒเตเดฃเตเดŸเต เดŽเดจเตเดจเดคเดพเดฃเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ เดฎเดฑเดจเตเดจเต เดŽเดฑเดฟเดฏเตเด• (เด…เดคเต†, เดตเดณเดฐเต† เดคเต†เดฑเตเดฑเดพเดฃเต):

void MyAwesomeMethod(String name)
{
  if (name == null)
    new ArgumentNullException(....);
  // do something
  ....
}

เด’เดฐเต เดชเดฟเดถเด•เต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดคเดคเดฟเดจเตเดฑเต† เดซเดฒเด‚ เดจเต‹เด•เตเด•เดพเด‚. เด’เดฐเต เดซเดฏเตฝ เดฎเดพเดคเตเดฐเดฎเต‡ เดชเดพเดดเตโ€Œเดธเต เดšเต†เดฏเตโ€ŒเดคเดฟเดŸเตเดŸเตเดณเตเดณเต‚ เดŽเดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเตป, เดžเดพเตป เดซเตเดฒเดพเด—เต เดšเต‡เตผเดคเตเดคเต -r pvs-studio-dotnet เดฒเต‹เดžเตเดšเต เดฒเตˆเดจเดฟเดฒเต‡เด•เตเด•เต:

C#-เดจเดพเดฏเดฟ PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต GitLab-เดฒเต† เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚
เด…เดจเดฒเตˆเดธเตผ เด’เดฐเต เดชเดฟเดถเด•เต เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดคเดพเดฏเตเด‚ เดถเดพเด–เด•เตพ เดฒเดฏเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เดจเตเดจเตเด‚ เดžเด™เตเด™เตพ เด•เดพเดฃเตเดจเตเดจเต.

เด’เดฐเต เดชเดฟเดถเด•เต เด•เต‚เดŸเดพเดคเต† เด‰เดฆเดพเดนเดฐเดฃเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเด‚. เด•เต‹เดกเต เดถเดฐเดฟเดฏเดพเด•เตเด•เตเดจเตเดจเต:

void MyAwesomeMethod(String name)
{
  if (name == null)
    throw new ArgumentNullException(....);
  // do something
  ....
}

เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดตเดฟเดถเด•เดฒเดจ เดซเดฒเด™เตเด™เตพ เดฒเดฏเดฟเดชเตเดชเดฟเด•เตเด•เตเด•:

C#-เดจเดพเดฏเดฟ PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต GitLab-เดฒเต† เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚
เดจเดฎเตเด•เตเด•เต เด•เดพเดฃเดพเดจเดพเด•เตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เดชเดฟเดถเด•เตเด•เดณเตŠเดจเตเดจเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดฟเดฒเตเดฒ, เดŸเดพเดธเตเด•เต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดทเตป เดตเดฟเดœเดฏเดฟเดšเตเดšเต, เด…เดคเดพเดฃเต เดžเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดคเต.

เดคเต€เดฐเตเดฎเดพเดจเด‚

เดถเดพเด–เด•เตพ เดฒเดฏเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เดฎเต‹เดถเด‚ เด•เต‹เดกเต เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดตเดณเดฐเต† เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดตเตเด‚ เดฎเดจเต‹เดนเดฐเดตเตเดฎเดพเดฃเต. เด…เดคเดฟเดจเดพเตฝ เดจเดฟเด™เตเด™เตพ CI/CD เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป เด’เดฐเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด…เดจเดฒเตˆเดธเตผ เดŽเด‚เดฌเต†เดกเต เดšเต†เดฏเตเดฏเดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เตเด•. เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เด‡เดคเต เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฏเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดจเดฟเด™เตเด™เดณเตเดŸเต† เดถเตเดฐเดฆเตเดงเดฏเตเด•เตเด•เต เดจเดจเตเดฆเดฟ.

C#-เดจเดพเดฏเดฟ PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต GitLab-เดฒเต† เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚
เด‡เด‚เด—เตเดฒเต€เดทเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเต‡เด•เตเดทเด•เดฐเตเดฎเดพเดฏเดฟ เดˆ เดฒเต‡เด–เดจเด‚ เดชเด™เตเด•เดฟเดŸเดพเตป เดจเดฟเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เด™เตเด•เดฟเตฝ, เดตเดฟเดตเตผเดคเตเดคเดจ เดฒเดฟเด™เตเด•เต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•: Nikolay Mironov. C#-เดจเดพเดฏเดฟ PVS-Studio เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต GitLab-เดฒเต† เดฒเดฏเดจ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดถเด•เดฒเดจเด‚.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•