Conas PVS-Studio a chumrú in Travis CI ag baint úsáide as aithriseoir consól cluiche PSP mar shampla

Conas PVS-Studio a chumrú in Travis CI ag baint úsáide as aithriseoir consól cluiche PSP mar shampla
Is seirbhís gréasáin dáilte é Travis CI chun bogearraí a thógáil agus a thástáil a úsáideann GitHub mar óstáil cód foinse. Chomh maith leis na cásanna oibriúcháin thuas, is féidir leat do bhuíochas féin a chur leis na roghanna cumraíochta fairsinge. San Airteagal seo, déanfaimid Travis CI a chumrú chun oibriú le PVS-Studio ag baint úsáide as an sampla cód PPSSPP.

Réamhrá

Travis C.I. is seirbhís gréasáin é chun bogearraí a thógáil agus a thástáil. De ghnáth úsáidtear é i gcomhar le cleachtais chomhtháthaithe leanúnacha.

PPSSPP - aithriseoir consól cluiche PSP. Tá an clár in ann seoladh aon cluichí ó íomhánna diosca atá beartaithe le haghaidh Sony PSP a aithris. Eisíodh an clár ar 1 Samhain, 2012. Tá PPSSPP ceadúnaithe faoi GPL v2. Is féidir le duine ar bith feabhsuithe a dhéanamh ar cód foinse an tionscadail.

Stiúideo PVS — anailísí cód statach chun earráidí agus leochaileachtaí féideartha i gcód cláir a chuardach. San Airteagal seo, le haghaidh athrú, seolfaimid PVS-Studio ní go háitiúil ar mheaisín an fhorbróra, ach sa scamall, agus lorgaimid earráidí i PPSSPP.

Travis CI a bhunú

Beidh stór de dhíth orainn ar GitHub, áit a bhfuil an tionscadal a theastaíonn uainn suite, chomh maith le eochair do PVS-Studio (is féidir leat a fháil eochair trialachSaor in aisce do thionscadail foinse oscailte).

A ligean ar dul go dtí an suíomh Travis C.I.. Tar éis údarú ag baint úsáide as do chuntas GitHub, feicfimid liosta stórtha:

Conas PVS-Studio a chumrú in Travis CI ag baint úsáide as aithriseoir consól cluiche PSP mar shampla
Don tástáil, forked mé PPSSPP.

Gníomhachtaimid an stór a theastaíonn uainn a bhailiú:

Conas PVS-Studio a chumrú in Travis CI ag baint úsáide as aithriseoir consól cluiche PSP mar shampla
Faoi láthair, ní féidir le Travis CI ár dtionscadal a thógáil mar níl aon treoracha le haghaidh tógála. Mar sin tá sé in am le haghaidh cumraíochta.

Le linn na hanailíse, beidh roinnt athróg úsáideach dúinn, mar shampla, an eochair do PVS-Studio, a bheadh ​​​​neamh-inmhianaithe a shonrú sa chomhad cumraíochta. Mar sin cuirimis athróga timpeallachta ag baint úsáide as na socruithe tógála in Travis CI:

Conas PVS-Studio a chumrú in Travis CI ag baint úsáide as aithriseoir consól cluiche PSP mar shampla
Ní mór dúinn:

  • PVS_USERNAME - ainm úsáideora
  • PVS_KEY - eochair
  • MAIL_USER - ríomhphost a úsáidfear chun an tuairisc a sheoladh
  • MAIL_PASSWORD - pasfhocal ríomhphoist

Tá an dá cheann deiridh roghnach. Úsáidfear iad seo chun torthaí a sheoladh tríd an bpost. Más mian leat an tuarascáil a dháileadh ar bhealach eile, ní gá duit iad a chur in iúl.

Mar sin, tá na hathróga comhshaoil ​​a theastaíonn uainn curtha leis againn:

Conas PVS-Studio a chumrú in Travis CI ag baint úsáide as aithriseoir consól cluiche PSP mar shampla
Anois, déanaimis comhad a chruthú .travis.yml agus é a chur i bhfréamh an tionscadail. Bhí comhad cumraíochta ag PPSSPP do Travis CI cheana féin, áfach, bhí sé ró-mhór agus go hiomlán mí-oiriúnach don sampla, agus mar sin bhí orainn é a shimpliú go mór agus gan ach na bunghnéithe a fhágáil.

Ar dtús, cuirimis in iúl an teanga, an leagan de Ubuntu Linux a theastaíonn uainn a úsáid sa mheaisín fíorúil, agus na pacáistí riachtanacha don tógáil:

language: cpp
dist: xenial

addons:
  apt:
    update: true
    packages:
      - ant
      - aria2
      - build-essential
      - cmake
      - libgl1-mesa-dev
      - libglu1-mesa-dev
      - libsdl2-dev
      - pv
      - sendemail
      - software-properties-common
    sources:
      - sourceline: 'ppa:ubuntu-toolchain-r/test'
      - sourceline: 'ppa:ubuntu-sdk-team/ppa'

Tá gach pacáiste atá liostaithe ag teastáil le haghaidh PPSSPP amháin.

Anois cuirimid an maitrís tionóil in iúl:

matrix:
  include:
    - os: linux
      compiler: "gcc"
      env: PPSSPP_BUILD_TYPE=Linux PVS_ANALYZE=Yes
    - os: linux
      compiler: "clang"
      env: PPSSPP_BUILD_TYPE=Linux

Beagán níos mó faoin alt maitrís. I Travis CI, tá dhá bhealach ann chun roghanna tógála a chruthú: is é an chéad cheann liosta tiomsaitheoirí, cineálacha córais oibriúcháin, athróga timpeallachta, etc. a shonrú, agus ina dhiaidh sin gintear maitrís de gach teaglaim féideartha; is léiriú sainráite é an dara ceann ar an maitrís. Ar ndóigh, is féidir leat an dá chur chuige seo a chomhcheangal agus cás uathúil a chur leis, nó, ar a mhalairt, é a eisiamh ag baint úsáide as an alt eisiamh. Is féidir leat tuilleadh a léamh faoi seo i Doiciméadú Travis CI.

Níl fágtha ach treoracha tionóil a bhaineann go sonrach le tionscadal a sholáthar:

before_install:
  - travis_retry bash .travis.sh travis_before_install

install:
  - travis_retry bash .travis.sh travis_install

script:
  - bash .travis.sh travis_script

after_success:
  - bash .travis.sh travis_after_success

Ceadaíonn Travis CI duit do chuid orduithe féin a chur leis le haghaidh céimeanna éagsúla de shaol an mheaisín fíorúil. Alt roimh_shuiteáil a fhorghníomhú roimh pacáistí a shuiteáil. Ansin shuiteáil, a leanann suiteáil na bpacáistí ón liosta addons.apta léirigh muid thuas. Bíonn an tionól féin ar siúl i script. Má chuaigh gach rud go maith, ansin táimid ag teacht isteach tar éis_rath (is san alt seo a rithfidh muid anailís statach). Ní hé seo na céimeanna go léir is féidir a mhodhnú, más gá duit níos mó, ba chóir duit breathnú isteach Doiciméadú Travis CI.

Ar mhaithe le léamh, cuireadh na horduithe i script ar leith .travis.sh, a chuirtear ag fréamh an tionscadail.

Mar sin tá an comhad seo a leanas againn .travis.yml:

language: cpp
dist: xenial

addons:
  apt:
    update: true
    packages:
      - ant
      - aria2
      - build-essential
      - cmake
      - libgl1-mesa-dev
      - libglu1-mesa-dev
      - libsdl2-dev
      - pv
      - sendemail
      - software-properties-common
    sources:
      - sourceline: 'ppa:ubuntu-toolchain-r/test'
      - sourceline: 'ppa:ubuntu-sdk-team/ppa'

matrix:
  include:
    - os: linux
      compiler: "gcc"
      env: PVS_ANALYZE=Yes
    - os: linux
      compiler: "clang"

before_install:
  - travis_retry bash .travis.sh travis_before_install

install:
  - travis_retry bash .travis.sh travis_install

script:
  - bash .travis.sh travis_script

after_success:
  - bash .travis.sh travis_after_success

Sula ndéantar na pacáistí a shuiteáil, déanfaimid na fo-mhodúil a nuashonrú. Tá sé seo ag teastáil chun PPSSPP a thógáil. Cuirimis an chéad fheidhm le .travis.sh (tabhair faoi deara an síneadh):

travis_before_install() {
  git submodule update --init --recursive
}

Anois táimid ag teacht go díreach chuig seoladh uathoibríoch PVS-Studio in Travis CI a bhunú. Ar dtús ní mór dúinn an pacáiste PVS-Studio a shuiteáil ar an gcóras:

travis_install() {
  if [ "$CXX" = "g++" ]; then
    sudo apt-get install -qq g++-4.8
  fi
  
  if [ "$PVS_ANALYZE" = "Yes" ]; then
    wget -q -O - https://files.viva64.com/etc/pubkey.txt 
      | sudo apt-key add -
    sudo wget -O /etc/apt/sources.list.d/viva64.list 
      https://files.viva64.com/etc/viva64.list  
    
    sudo apt-get update -qq
    sudo apt-get install -qq pvs-studio 
                             libio-socket-ssl-perl 
                             libnet-ssleay-perl
  fi
    
  download_extract 
    "https://cmake.org/files/v3.6/cmake-3.6.2-Linux-x86_64.tar.gz" 
    cmake-3.6.2-Linux-x86_64.tar.gz
}

Ag tús na feidhme travis_shuiteáil suiteáilimid na tiomsaitheoirí a theastaíonn uainn ag baint úsáide as athróga timpeallachta. Ansin, má tá an athróg $PVS_ANALYZE luach siopaí Is ea (chuireamar in iúl é san alt env le linn cumraíocht maitrís a thógáil), suiteáilimid an pacáiste pvs-stiúideo. Chomh maith leis seo, cuirtear pacáistí in iúl freisin libio-soicéad-ssl-perl и libnet-ssleay-perl, áfach, tá siad ag teastáil le haghaidh torthaí postála, mar sin níl siad riachtanach má tá modh eile roghnaithe agat chun do thuairisc a sheachadadh.

Feidhm íoslódáil_sliocht íoslódáil agus díphacáil an chartlann sonraithe:

download_extract() {
  aria2c -x 16 $1 -o $2
  tar -xf $2
}

Tá sé in am an tionscadal a chur le chéile. Tarlaíonn sé seo sa rannóg script:

travis_script() {
  if [ -d cmake-3.6.2-Linux-x86_64 ]; then
    export PATH=$(pwd)/cmake-3.6.2-Linux-x86_64/bin:$PATH
  fi
  
  CMAKE_ARGS="-DHEADLESS=ON ${CMAKE_ARGS}"
  if [ "$PVS_ANALYZE" = "Yes" ]; then
    CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
  fi
  cmake $CMAKE_ARGS CMakeLists.txt
  make
}

Go deimhin, is cumraíocht bhunaidh shimplithe é seo, ach amháin na línte seo:

if [ "$PVS_ANALYZE" = "Yes" ]; then
  CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
fi

Sa chuid seo den chód a shocraímid do cmake bratach chun orduithe tiomsaithe a onnmhairiú. Tá sé seo riachtanach le haghaidh anailísí cód statach. Is féidir leat tuilleadh a léamh faoi seo san alt “Conas PVS-Studio a rith ar Linux agus macOS".

Más rud é go n-éireodh leis an tionól, ansin déanaimid é tar éis_rath, áit a ndéanaimid anailís statach:

travis_after_success() {
  if [ "$PVS_ANALYZE" = "Yes" ]; then
    pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY -o PVS-Studio.lic
    pvs-studio-analyzer analyze -j2 -l PVS-Studio.lic 
                                    -o PVS-Studio-${CC}.log 
                                    --disableLicenseExpirationCheck
    
    plog-converter -t html PVS-Studio-${CC}.log -o PVS-Studio-${CC}.html
    sendemail -t [email protected] 
              -u "PVS-Studio $CC report, commit:$TRAVIS_COMMIT" 
              -m "PVS-Studio $CC report, commit:$TRAVIS_COMMIT" 
              -s smtp.gmail.com:587 
              -xu $MAIL_USER 
              -xp $MAIL_PASSWORD 
              -o tls=yes 
              -f $MAIL_USER 
              -a PVS-Studio-${CC}.log PVS-Studio-${CC}.html
  fi
}

Breathnaímis níos géire ar na línte seo a leanas:

pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY -o PVS-Studio.lic
pvs-studio-analyzer analyze -j2 -l PVS-Studio.lic 
                                -o PVS-Studio-${CC}.log 
                                --disableLicenseExpirationCheck
plog-converter -t html PVS-Studio-${CC}.log -o PVS-Studio-${CC}.html

Gineann an chéad líne comhad ceadúnais ón ainm úsáideora agus ón eochair a shonraigh muid ag an tús nuair a bhí athróga timpeallachta Travis CI á mbunú.

Tosaíonn an dara líne an anailís go díreach. Bratach -j leagann sé amach líon na snáitheanna le haghaidh anailíse, bratach -l Léiríonn ceadúnas, bratach sainmhíníonn an comhad le haghaidh outputting logs, agus an bhratach -disableLicenseExpirationCheck ag teastáil le haghaidh leaganacha trialach, ós rud é de réir réamhshocraithe pvs stiúideo-anailíseoir rabhadh a thabhairt don úsáideoir go bhfuil an ceadúnas ar tí dul in éag. Chun é seo a chosc, is féidir leat an bhratach seo a shonrú.

Tá aschur amh sa logchomhad nach féidir a léamh gan é a chomhshó, mar sin ní mór duit an comhad a léamh ar dtús. A ligean ar pas a fháil sa logs trí ploc-tiontaire, agus is comhad html an t-aschur.

Sa sampla seo, chinn mé tuairiscí a sheoladh tríd an bpost ag baint úsáide as an ordú seol ríomhphoist.

Mar thoradh air sin, fuair muid an comhad seo a leanas .travis.sh:

#/bin/bash

travis_before_install() {
  git submodule update --init --recursive
}

download_extract() {
  aria2c -x 16 $1 -o $2
  tar -xf $2
}

travis_install() {
  if [ "$CXX" = "g++" ]; then
    sudo apt-get install -qq g++-4.8
  fi
  
  if [ "$PVS_ANALYZE" = "Yes" ]; then
    wget -q -O - https://files.viva64.com/etc/pubkey.txt 
      | sudo apt-key add -
    sudo wget -O /etc/apt/sources.list.d/viva64.list 
      https://files.viva64.com/etc/viva64.list  
    
    sudo apt-get update -qq
    sudo apt-get install -qq pvs-studio 
                             libio-socket-ssl-perl 
                             libnet-ssleay-perl
  fi
    
  download_extract 
    "https://cmake.org/files/v3.6/cmake-3.6.2-Linux-x86_64.tar.gz" 
    cmake-3.6.2-Linux-x86_64.tar.gz
}
travis_script() {
  if [ -d cmake-3.6.2-Linux-x86_64 ]; then
    export PATH=$(pwd)/cmake-3.6.2-Linux-x86_64/bin:$PATH
  fi
  
  CMAKE_ARGS="-DHEADLESS=ON ${CMAKE_ARGS}"
  if [ "$PVS_ANALYZE" = "Yes" ]; then
    CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
  fi
  cmake $CMAKE_ARGS CMakeLists.txt
  make
}
travis_after_success() {
  if [ "$PVS_ANALYZE" = "Yes" ]; then
    pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY -o PVS-Studio.lic
    pvs-studio-analyzer analyze -j2 -l PVS-Studio.lic 
                                    -o PVS-Studio-${CC}.log 
                                    --disableLicenseExpirationCheck
    
    plog-converter -t html PVS-Studio-${CC}.log -o PVS-Studio-${CC}.html
    sendemail -t [email protected] 
              -u "PVS-Studio $CC report, commit:$TRAVIS_COMMIT" 
              -m "PVS-Studio $CC report, commit:$TRAVIS_COMMIT" 
              -s smtp.gmail.com:587 
              -xu $MAIL_USER 
              -xp $MAIL_PASSWORD 
              -o tls=yes 
              -f $MAIL_USER 
              -a PVS-Studio-${CC}.log PVS-Studio-${CC}.html
  fi
}
set -e
set -x

$1;

Anois tá sé in am na hathruithe ar an stór git a bhrú, agus ina dhiaidh sin reáchtálfaidh Travis CI an tógáil go huathoibríoch. Cliceáil ar “ppsspp” chun dul chuig na tuarascálacha tógála:

Conas PVS-Studio a chumrú in Travis CI ag baint úsáide as aithriseoir consól cluiche PSP mar shampla
Feicfimid forbhreathnú ar an tógáil reatha:

Conas PVS-Studio a chumrú in Travis CI ag baint úsáide as aithriseoir consól cluiche PSP mar shampla
Má chríochnaítear an tógáil go rathúil, gheobhaidh muid ríomhphost le torthaí na hanailíse statach. Ar ndóigh, ní hé an postáil an t-aon bhealach chun tuairisc a fháil. Is féidir leat aon mhodh cur chun feidhme a roghnú. Ach tá sé tábhachtach a mheabhrú, tar éis an tógáil a bheith críochnaithe, ní bheidh sé indéanta rochtain a fháil ar na comhaid meaisín fíorúil.

Achoimre earráide

Tá an chuid is deacra curtha i gcrích againn go rathúil. Anois déanaimis deimhin de gur fiú ár n-iarrachtaí go léir. Breathnaímis ar roinnt pointí suimiúla ón tuarascáil anailíse statach a tháinig chugam tríd an bpost (ní raibh sé in iúl do rud ar bith mé é).

Optimization contúirteacha

void sha1( unsigned char *input, int ilen, unsigned char output[20] )
{
  sha1_context ctx;

  sha1_starts( &ctx );
  sha1_update( &ctx, input, ilen );
  sha1_finish( &ctx, output );

  memset( &ctx, 0, sizeof( sha1_context ) );
}

Rabhadh PVS-Studio: V597 D'fhéadfadh an tiomsaitheoir an glao feidhme 'memset' a scriosadh, a úsáidtear chun maolán 'suim' a shruthlú. Ba cheart an fheidhm RtlSecureZeroMemory() a úsáid chun na sonraí príobháideacha a scriosadh. sha1.cpp 325

Tá an píosa cód seo suite sa mhodúl hashing slán, áfach, tá locht slándála tromchúiseach ann (CWE-14). Breathnaímid ar an liostú cóimeála a ghintear agus an leagan Dífhabhtaithe á thiomsú:

; Line 355
  mov r8d, 20
  xor edx, edx
  lea rcx, QWORD PTR sum$[rsp]
  call memset
; Line 356

Tá gach rud in ord agus an fheidhm memeset a fhorghníomhú, ar an mbealach sin sonraí tábhachtacha a fhorscríobh i RAM, áfach, ná bíodh áthas ort go fóill. Breathnaímid ar an liosta tionóil den leagan Eisiúint le leas iomlán a bhaint as:

; 354  :
; 355  :  memset( sum, 0, sizeof( sum ) );
; 356  :}

Mar is léir ón liostú, rinne an tiomsaitheoir neamhaird den ghlao memeset. Tá sé seo mar gheall ar an bhfíric go bhfuil sa fheidhm sha1 tar éis an ghlao memeset gan tagairt níos mó do struchtúr ctx. Dá bhrí sin, ní fheiceann an tiomsaitheoir aon phointe am próiseálaí a chur amú ag róscríobh cuimhne nach n-úsáidtear sa todhchaí. Is féidir leat é seo a shocrú tríd an bhfeidhm a úsáid RtlSecureZeroCuimhne comhchosúil di.

Ceart:

void sha1( unsigned char *input, int ilen, unsigned char output[20] )
{
  sha1_context ctx;

  sha1_starts( &ctx );
  sha1_update( &ctx, input, ilen );
  sha1_finish( &ctx, output );

  RtlSecureZeroMemory(&ctx, sizeof( sha1_context ) );
} 

Comparáid gan ghá

static u32 sceAudioOutputPannedBlocking
             (u32 chan, int leftvol, int rightvol, u32 samplePtr) {
  int result = 0;
  // For some reason, this is the only one that checks for negative.
  if (leftvol > 0xFFFF || rightvol > 0xFFFF || leftvol < 0 || rightvol < 0) {
    ....
  } else {
    if (leftvol >= 0) {
      chans[chan].leftVolume = leftvol;
    }
    if (rightvol >= 0) {
      chans[chan].rightVolume = rightvol;
    }
    chans[chan].sampleAddress = samplePtr;
    result = __AudioEnqueue(chans[chan], chan, true);
  }
}

Rabhadh PVS-Studio: V547 Bíonn an slonn 'leftvol >= 0' fíor i gcónaí. sceAudio.cpp 120

Tabhair aird ar an mbrainse eile don chéad cheann if. Ní dhéanfar an cód a fhorghníomhú ach amháin má tá na coinníollacha go léir clévol > 0xFFFF || ceartvol > 0xFFFF || clébh < 0 || ceart<0 Beidh dul amach a bheith bréagach. Mar sin, faigheann muid na ráitis seo a leanas, a bheidh fíor don bhrainse eile: clévol <= 0xFFFF, ceartvol <= 0xFFFF, clé >= 0 и ceart >= 0. Tabhair faoi deara an dá ráiteas deiridh. An ndéanann sé ciall a sheiceáil cad is coinníoll riachtanach chun an píosa cód seo a fhorghníomhú?

Mar sin is féidir linn na ráitis choinníollacha seo a bhaint go sábháilte:

static u32 sceAudioOutputPannedBlocking
(u32 chan, int leftvol, int rightvol, u32 samplePtr) {
  int result = 0;
  // For some reason, this is the only one that checks for negative.
  if (leftvol > 0xFFFF || rightvol > 0xFFFF || leftvol < 0 || rightvol < 0) {
    ....
  } else {
    chans[chan].leftVolume = leftvol;
    chans[chan].rightVolume = rightvol;

    chans[chan].sampleAddress = samplePtr;
    result = __AudioEnqueue(chans[chan], chan, true);
  }
}

Cás eile. Tá earráid de chineál éigin i bhfolach taobh thiar de na coinníollacha iomarcacha seo. B'fhéidir nár sheiceáil siad cad a bhí ag teastáil.

Ctrl+C Buaileann Ctrl+V Ar Ais

static u32 scePsmfSetPsmf(u32 psmfStruct, u32 psmfData) {
  if (!Memory::IsValidAddress(psmfData) ||
      !Memory::IsValidAddress(psmfData)) {
    return hleReportError(ME, SCE_KERNEL_ERROR_ILLEGAL_ADDRESS, "bad address");
  }
  ....
}

V501 Tá fo-léirithe comhionanna '!Memory::IsValidAddress(psmfData)' ar chlé agus ar dheis den '||' oibreoir. scPsmf.cpp 703

Tabhair aird ar an seic taobh istigh if. Nach gceapann tú go bhfuil sé aisteach go ndéanaimid seiceáil an bhfuil an seoladh bailí? psmf Sonraí, faoi dhó oiread? Is cosúil go bhfuil sé seo aisteach domsa... Go deimhin, is clóscríobh é seo ar ndóigh, agus ba é an smaoineamh an dá pharaiméadair ionchuir a sheiceáil.

Rogha ceart:

static u32 scePsmfSetPsmf(u32 psmfStruct, u32 psmfData) {
  if (!Memory::IsValidAddress(psmfStruct) ||
      !Memory::IsValidAddress(psmfData)) {
    return hleReportError(ME, SCE_KERNEL_ERROR_ILLEGAL_ADDRESS, "bad address");
  }
  ....
}

Athróg dearmadta

extern void ud_translate_att(
  int size = 0;
  ....
  if (size == 8) {
    ud_asmprintf(u, "b");
  } else if (size == 16) {
    ud_asmprintf(u, "w");
  } else if (size == 64) {
    ud_asmprintf(u, "q");
  }
  ....
}

Rabhadh PVS-Studio: V547 Bíonn an slonn 'méid == 8' bréagach i gcónaí. sin-att.c 195

Tá an earráid seo suite san fhillteán ext, mar sin níl sé ábhartha i ndáiríre don tionscadal, ach fuarthas an fabht sular thug mé faoi deara é, agus mar sin chinn mé é a fhágáil. Tar éis an tsaoil, níl an t-alt seo faoi athbhreithniú a dhéanamh ar earráidí, ach faoi chomhtháthú le Travis CI, agus níor rinneadh aon chumraíocht den anailísí.

Athróg méid Tá tairiseach tosaithe aige, áfach, ní úsáidtear é ar chor ar bith sa chód, díreach síos go dtí an t-oibreoir if, a thugann, ar ndóigh bréagach agus na coinníollacha á seiceáil, mar, mar is cuimhin linn, méid comhionann le nialas. Ní dhéanann seiceálacha ina dhiaidh sin aon chiall freisin.

De réir dealraimh, rinne údar an bhlúire cód dearmad an athróg a scríobh méid roimhe sin.

stad

Seo nuair is dócha go gcríochnóidh muid leis na botúin. Is é cuspóir an ailt seo ná obair PVS-Studio in éineacht le Travis CI a léiriú, agus gan an tionscadal a anailísiú chomh críochnúil agus is féidir. Más mian leat botúin níos mó agus níos áille, is féidir leat admire i gcónaí iad anseo :).

Conclúid

Trí úsáid a bhaint as seirbhísí gréasáin chun tionscadail a thógáil in éineacht le cleachtas anailíse incriminteach, is féidir leat go leor fadhbanna a aimsiú díreach tar éis cód a chumasc. Mar sin féin, b'fhéidir nach leor tógáil amháin, mar sin feabhsófar cáilíocht an chóid go mór trí thástáil a chur ar bun in éineacht le hanailís statach.

naisc úsáideacha

Conas PVS-Studio a chumrú in Travis CI ag baint úsáide as aithriseoir consól cluiche PSP mar shampla

Más mian leat an t-alt seo a roinnt le lucht féachana Béarla, bain úsáid as an nasc aistriúcháin: Maxim Zvyagintsev. Conas PVS-Studio a chur ar bun in Travis CI ag baint úsáide as aithriseoir consól cluiche PSP mar shampla.

Foinse: will.com

Add a comment