Megosztás a következőn keresztül:


Útmutató: C/C++ kód elemzése hibák esetén

Ez az útmutató bemutatja, hogyan elemezheti a C/C++ kódokat a lehetséges kódhibák esetén. A C/C++ kód kódelemző eszközeit használja.

Ebben az útmutatóban a következőt fogja elvégezni:

  • Kódelemzés futtatása natív kódon.
  • Kódhibákra vonatkozó figyelmeztetések elemzése.
  • A figyelmeztetést hibaként kezelje.
  • A kódhibák elemzésének javítása érdekében jegyzetelje a forráskódot.

Előfeltételek

Kódelemzés futtatása natív kódon

Kódhibák elemzése natív kódon

  1. Nyissa meg a CppDemo-megoldást a Visual Studióban.

    A CppDemo-megoldás most feltölti a Megoldáskezelőt.

  2. A Build menüben válassza a Megoldás újraépítése lehetőséget.

    A megoldás hibák és figyelmeztetések nélkül épül fel.

  3. A Megoldáskezelőben válassza a CodeDefects projektet.

  4. A Projekt menüben válassza a Tulajdonságok lehetőséget.

    Megjelenik a CodeDefects Tulajdonságlapok párbeszédpanel.

  5. Válassza ki a Code Analysis tulajdonságlapját.

  6. Módosítsa az Enable Code Analysis on Buildtulajdonságot Igen értékre. A módosítások mentéséhez válassza az OK lehetőséget.

  7. A CodeDefects-projekt újraépítése.

    A kódelemzési figyelmeztetések a Hibalista ablakban jelennek meg.

  1. Nyissa meg a CppDemo-megoldást a Visual Studióban.

    A CppDemo-megoldás most feltölti a Megoldáskezelőt.

  2. A Build menüben válassza a Megoldás újraépítése lehetőséget.

    A megoldás hibák és figyelmeztetések nélkül épül fel.

    Megjegyzés:

    A Visual Studio 2017-ben hamis figyelmeztetés E1097 unknown attribute "no_init_all" jelenhet meg az IntelliSense motorban. Az üzenet biztonságosan figyelmen kívül hagyható –

  3. A Megoldáskezelőben válassza a CodeDefects projektet.

  4. A Projekt menüben válassza a Tulajdonságok lehetőséget.

    Megjelenik a CodeDefects Tulajdonságlapok párbeszédpanel.

  5. Válassza ki a Code Analysis tulajdonságlapját.

  6. Jelölje be a Kódelemzés engedélyezése buildeléskor jelölőnégyzetet. A módosítások mentéséhez válassza az OK lehetőséget.

  7. A CodeDefects-projekt újraépítése.

    A kódelemzési figyelmeztetések a Hibalista ablakban jelennek meg.

Kódhibákkal kapcsolatos figyelmeztetések elemzése

  1. A Nézet menüben válassza a Hiba lista lehetőséget.

    Előfordulhat, hogy ez a menüelem nem látható. Ez a Visual Studióban kiválasztott fejlesztői profiltól függ. Előfordulhat, hogy a Nézet menü Más Windows elemére kell mutatnia, majd válassza a Hibalista lehetőséget.

  2. A Hibalista ablakban kattintson duplán a következő figyelmeztetésre:

    C6230: Implicit konverzió szemantikailag eltérő típusok között: a HRESULT használata logikai kontextusban.

    A kódszerkesztő megjeleníti a függvény bool ProcessDomain() belsejében a figyelmeztetést okozó sort. Ez a figyelmeztetés azt jelzi, hogy egy HRESULT olyan "ha" feltételben használatos, ahol logikai eredményre van szükség. Ez általában hiba, mert ha a S_OK HRESULT függvényt visszaadják egy függvényből, az sikerességet jelez, de logikai értékké alakítva a függvény kiértékeli a következőt false: .

  3. Javítsa ki ezt a figyelmeztetést a SUCCEEDED makróval, amely akkor lesz átalakítva true , ha a HRESULT visszatérési érték sikerességet jelez. A kódnak a következő kódhoz kell hasonlítania:

    if (SUCCEEDED(ReadUserAccount()))
    
  4. A hibalistában kattintson duplán a következő figyelmeztetésre:

    C6282: Helytelen operátor: az állandó hozzárendelése logikai környezetben. Fontolja meg inkább az "==" használatát.

  5. Javítsa ki ezt a figyelmeztetést az egyenlőség tesztelésével. A kódnak a következő kódhoz hasonlóan kell kinéznie:

    if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
    
  6. Javítsa ki a hibalistában szereplő többi C6001-figyelmeztetést az inicializálással i és j a 0-ra.

  7. A CodeDefects-projekt újraépítése.

    A projekt figyelmeztetések és hibák nélkül épül fel.

A forráskód-annotációk figyelmeztetéseinek javítása

A forráskód megjegyzésekkel kapcsolatos figyelmeztetéseinek engedélyezése a annotation.c fájlban

  1. A Megoldáskezelőben válassza a Széljegyzetek projektet.

  2. A Projekt menüben válassza a Tulajdonságok lehetőséget.

    Megjelenik a Megjegyzések tulajdonságlapjai párbeszédpanel.

  3. Válassza ki a Code Analysis tulajdonságlapját.

  4. Módosítsa az Enable Code Analysis on Buildtulajdonságot Igen értékre. A módosítások mentéséhez válassza az OK lehetőséget.

  1. A Megoldáskezelőben válassza a Széljegyzetek projektet.

  2. A Projekt menüben válassza a Tulajdonságok lehetőséget.

    Megjelenik a Megjegyzések tulajdonságlapjai párbeszédpanel.

  3. Válassza ki a Code Analysis tulajdonságlapját.

  4. Jelölje be a Kódelemzés engedélyezése buildeléskor jelölőnégyzetet. A módosítások mentéséhez válassza az OK lehetőséget.

A forráskód széljegyzetekkel kapcsolatos figyelmeztetéseinek javítása a annotation.c fájlban

  1. A Jegyzetek projektet újjáépíteni.

  2. A Build menüben válassza a Kódelemzés futtatása széljegyzeteken lehetőséget.

  3. A hibalistában kattintson duplán a következő figyelmeztetésre:

    C6011: Null mutató "newNode" elhalasztása.

    Ez a figyelmeztetés azt jelzi, hogy a hívó nem ellenőrizte a visszatérési értéket. Ebben az esetben előfordulhat, hogy AllocateNode egy hívás NULL értéket ad vissza. Az AllocateNode függvény deklarációját az annotations.h fejlécfájlban találja.

  4. A kurzor azon a helyen található a annotations.cpp fájlban, ahol a figyelmeztetés történt.

  5. A figyelmeztetés kijavításához használjon egy "if" utasítást a visszatérési érték teszteléséhez. A kódnak a következő kódhoz kell hasonlítania:

    LinkedList* newNode = AllocateNode();
    if (nullptr != newNode)
    {
        newNode->data = value;
        newNode->next = 0;
        node->next = newNode;
    }
    
  6. A Jegyzetek projektet újjáépíteni.

    A projekt figyelmeztetések és hibák nélkül épül fel.

További problémák felderítéséhez használjon forráskód-széljegyzetet

A forráskód széljegyzetének használata

  1. A függvény AddTail formális paramétereinek és visszatérési értékének megjegyzésével jelezheti, hogy a mutató értéke null lehet:

    _Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)
    
  2. A Build menüben válassza a Kódelemzés futtatása a megoldáson lehetőséget.

  3. A hibalistában kattintson duplán a következő figyelmeztetésre:

    C6011: NULL mutató "csomópont" elhalasztása.

    Ez a figyelmeztetés azt jelzi, hogy a függvénybe átadott csomópont null értékű lehet.

  4. A figyelmeztetés kijavításához használjon egy "if" utasítást a függvény elején az átadott érték teszteléséhez. A kódnak a következő kódhoz kell hasonlítania:

    if (nullptr == node)
    {
         return nullptr;
    }
    
  5. A Build menüben válassza a Kódelemzés futtatása a megoldáson lehetőséget.

    A projekt mostantól figyelmeztetések és hibák nélkül épül fel.

Lásd még

Útmutató: Felügyelt kód elemzése kódhibákhoz
C/C++ kódelemzése