الإرشادات التفصيلية: Analyzing C/C++ Code for Defects

توضح هذه معاينة كيفية إلى تحليل الرمز/C + + C للعيوب المحتملة للتعليمات البرمجية باستخدام ol إلى تحليل تعليمات برمجية ل C/C + + رمز.

في هذه معاينة، يمكنك التنقل خلال عملية استخدام تحليل تعليمات برمجية إلى تحليل تعليمات برمجية C/C + + للعيوب المحتملة للتعليمات البرمجية.

سيتم إكمال الخطوات التالية:

  • تشغيل تحليل تعليمات برمجية على تعليمة برمجية أصلية.

  • تحليل تعليمات برمجية defect التحذيرات.

  • التعامل مع تحذير كـ خطأ.

  • إضافة تعليق توضيحي للتعليمات البرمجية المصدر إلى تحسين تعليمات برمجية عيب التحليل.

المتطلبات الأساسية

إلى تشغيل تعليمات برمجية عيب التحليل تشغيل تعليمات برمجية الأصلية

  1. فتح الحل الاختبار في Visual Studio.

    الحل الاختبار الآن بملء من مستكشف الحل.

  2. من القائمة Build (إنشاء)، انقر فوق Rebuild Solution ( إعادة إنشاء الحل).

    بناء الحل بدون أي أخطاء أو تحذيرات.

  3. في مستكشف الحل ، تحديد مشروع CodeDefects.

  4. في قائمة مشروع, انقر فوق خصائص.

    صندوق الحوار الصفحات الخصائص CodeDefects هو dهوplayed.

  5. انقر فوق تحليل تعليمات برمجية.

  6. انقر فوق تمكين تحليل تعليمات برمجية ل + + C/C على إنشاء خانة اختيار.

  7. اعادة تجميع مشروع CodeDefects.

    تعليمات برمجية عرض تحذيرات التحليل في قائمة الأخطاء.

إلى تحليل التحذيرات عيب تعليمات برمجية

  1. تشغيل القائمةعرض، انقر فوق قائمة الأخطاء.

    استناداً إلى يحلل للمطور الذي اخترته في Visual Studio، قد تحتاج للإشارة إلى Windows الأخرى في القائمة عرض ، و ثم انقر فوق قائمة الأخطاء.

  2. في قائمة الأخطاء، انقر نقراً مزدوجاً فوق الخيارات التالية تحذير:

    تحذير C6230: تحويل الضمني بين الأنواع المختلفة دلالياً: استخدام HRESULT في سياق منطقي.

    The code editor displays the line that caused the warning in the function bool ProcessDomain(). Th هو التحذير يشير إلى أن HRESULT هو المستخدمة في 'إذا كان' كشف الموقع ينتج عنه قيمة منطقية هو المتوقع.

  3. قم بتصحيح هذا التحذير بواسطة استخدام الماكرو نجحت. يجب أن تتشابه مع تعليمات برمجية بالتعليمة البرمجية التالية:

    if (SUCCEEDED (ReadUserAccount()) )
    
  4. في قائمة الأخطاء، انقر نقراً مزدوجاً فوق الخيارات التالية تحذير:

    تحذير C6282: عامل تشغيل غير صحيح: تعيين إلى ثابت في اختبار سياق. كان = = intended؟

  5. قم بتصحيح هذا التحذير بواسطة اختبار لمساواة. الخاص بك تعليمات برمجية يجب أن يكون مشابهاً لما يلي تعليمات برمجية:

    if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != '\\'))
    

إلى معاملة التحذير كخطأ

  1. في خطأ.cpp ملف، قم بإضافة ما يلي #pragmaالعبارة إلى البداية ملف للتعامل مع تحذير C6001 كخطأ:

    #pragma warning (error: 6001)
    
  2. اعادة تجميع مشروع CodeDefects.

    في قائمة الأخطاء، C6001 الآن يظهر كـ خطأ.

  3. قم بتصحيح الأخطاء C6001 الثاني المتبقية في قائمة الأخطاء بواسطة تهيئة iو jإلى 0.

  4. اعادة تجميع مشروع CodeDefects.

    بناء مشروع دون أية تحذيرات أو أخطاء.

لتصحيح المصدر تعليمات برمجية تحذيرات التعليق التوضيحي في تعليق توضيحي.c

  1. في "مستكشف الحل"، تحديد مشروع تعليقات توضيحية.

  2. في قائمة مشروع, انقر فوق خصائص.

    صندوق الحوار الصفحات الخاصية للتعليقات التوضيحية هو dهوplayed.

  3. انقر فوق تحليل تعليمات برمجية.

  4. تحديد تمكين تحليل تعليمات برمجية ل + + C/C على إنشاء فحص صندوق.

  5. اعادة تجميع مشروع تعليقات توضيحية.

  6. في قائمة الأخطاء، انقر نقراً مزدوجاً فوق الخيارات التالية تحذير:

    تحذير C6011: dereferencing المؤشر الفارغ 'newNode'.

    هذا التحذير يشير إلى فشل بالمتصل للتحقق الالقيمة المرجعة. في هذه حالة، استدعاء إلى من AllocateNode قد بإرجاع القيمة فارغة (NULL) (راجع ملف الرأس annotations.h لتعريف دالة ل AllocateNode).

  7. فتح في annotations.cpp ملف.

  8. إلى تصحيح هذا التحذير، استخدم 'إذا كان' كشف إلى لاختبار القيمة الإرجاع. يجب أن تتشابه مع تعليمات برمجية بالتعليمة البرمجية التالية:

    if (NULL != newNode)

    {

    newNode->data = value;

    newNode->next = 0;

    node->next = newNode;

    }

  9. اعادة تجميع مشروع تعليقات توضيحية.

    بناء مشروع دون أية تحذيرات أو أخطاء.

لاستخدام التعليق التوضيحي للتعليمات البرمجية المصدر

  1. إضافة تعليق توضيحي للمعلمات الأساسية و بإرجاع قيمة من دالة AddTailباستخدام الشروط و ما قبل النشر كما هو مبين في هذا المثال:

    [returnvalue:SA_Post (Null=SA_Maybe)] LinkedList* AddTail

    (

        [SA_Pre(Null=SA_Maybe)] LinkedList* node,

        int value

     )

  2. قم بإعادة إنشاء مشروع تعليقات توضيحية.

  3. في قائمة الأخطاء، انقر نقراً مزدوجاً فوق الخيارات التالية تحذير:

    تحذير C6011: dereferencing مؤشر NULL 'عقدة'.

    هذا التحذير يشير في أن العقدة التي تم تمريرها في دالة قد يكون خاليا، و تشير في رقم السطر الموقع تم رفع التحذير.

  4. إلى تصحيح هذا التحذير، استخدم 'إذا كان' كشف إلى لاختبار القيمة الإرجاع. يجب أن تتشابه مع تعليمات برمجية بالتعليمة البرمجية التالية:

      . . .
      LinkedList *newNode = NULL; 
      if (NULL == node)
      {
           return NULL;
          . . .
      }
    
  5. قم بإعادة إنشاء مشروع تعليقات توضيحية.

    بناء مشروع دون أية تحذيرات أو أخطاء.

راجع أيضًا:

المهام

الإرشادات التفصيلية: ‏‏يتم الآن التحليل? تعليمات برمجية التي تمت إدارتها للعيوب تعليمات برمجية