استكشاف أخطاء نتائج CodeQL وإصلاحها

مكتمل

توفر هذه الوحدة تلميحات لتحسين واستكشاف الأخطاء وإصلاحها عند العمل مع CodeQL ومسح التعليمات البرمجية ضوئيا.

تحسين أوقات تشغيل تحليل CodeQL

هناك عدة أسباب تجعل تحليل CodeQL الخاص بك قد يستغرق وقتا طويلا لإكماله:

  • إذا كنت تستخدم المشغلات المستضافة ذاتيا لتحليل CodeQL، يمكنك زيادة الذاكرة أو عدد الذاكرات الأساسية.
  • يمكن أن تحدث مشاكل عندما يحتوي المستودع على لغات متعددة. يمكنك تعديل سير العمل لاستخدام مصفوفة تعمل على تسريع تحليل لغات متعددة. يتم تشغيل تحليل كل لغة بالتوازي مع سير عمل تحليل CodeQL الافتراضي. قد تحتاج إلى تكوين مهام سير العمل المتقدمة بشكل مماثل إذا تم إعدادها لتشغيل تهيئة اللغة وتحليلها بشكل تسلسلي.
  • قد يتسبب مقدار التعليمات البرمجية التي تقوم بتحليلها في أوقات تشغيل طويلة. عادة ما يتناسب وقت التحليل مع مقدار التعليمات البرمجية التي يتم تحليلها. يمكنك تقليل حجم التعليمات البرمجية عن طريق استبعاد رمز الاختبار أو تقسيم التعليمات البرمجية إلى مهام سير عمل متعددة لتحليل مجموعة فرعية فقط مع كل فحص.
  • قد ترغب في تشغيل التحليل على الحدث schedule فقط إذا كان تحليلك بطيئا جدا أثناء أحداث push أو pull_request.

تحسين استعلامات CodeQL

قد تنشأ بعض مشكلات الأداء من الاستعلامات المخصصة. يمكنك العثور على المشاكل الشائعة وكيفية استكشافها وإصلاحها في وثائق CodeQL حول استكشاف أخطاء أداء الاستعلام وإصلاحها.

فيما يلي نقاط مهمة يجب وضعها في الاعتبار أثناء العمل مع CodeQL ولغة استعلام QL:

  • يتم تقييم دالات تقييم وفئات CodeQL إلى جداول قاعدة البيانات. تنشئ دالات التقييم الكبيرة جداول كبيرة مع العديد من الصفوف، لذا فهي مكلفة لحسابها.
  • يتم تنفيذ لغة QL من خلال عمليات قاعدة البيانات القياسية والجبر العلائقي، مثل الانضمام والإسقاط والاتحاد.
  • يتم تقييم الاستعلامات من أسفل إلى أعلى، ما يعني أنه لا يتم تقييم دالة التقييم حتى يتم تقييم جميع التقييمات التي يعتمد عليها.

تصحيح البيانات الاصطناعية

يمكنك الحصول على البيانات الاصطناعية لمساعدتك في تصحيح المشكلات المتعلقة بمسح التعليمات البرمجية CodeQL. تعديل الخطوة init لملف سير عمل CodeQL وتعيين debug: true. يتم تحميل البيانات الاصطناعية لتصحيح الأخطاء إلى سير العمل الذي يتم تشغيله كأداة تسمى debug-artifacts. تحتوي البيانات على سجلات CodeQL وقواعد بيانات CodeQL وأي ملفات SARIF ينتجها سير العمل.

استكشاف أخطاء ملحق CodeQL ل VS Code وإصلاحها

تحتوي ملفات سجل ملحق VS Code على معلومات مفصلة لمساعدتك في استكشاف الأخطاء وإصلاحها.

تظهر رسائل التقدم والخطأ كإعلامات في الزاوية السفلية اليسرى من مساحة العمل. يمكنك استخدام القائمة المنسدلة سجل ملحق CodeQL لتحديد السجلات التي تحتاجها.

لقطة شاشة تعرض تحديد السجلات في طريقة عرض الإخراج.

رسائل الخطأ الشائعة

لاستكشاف أخطاء سير عمل CodeQL وإصلاحها، تعرف على رسائل الخطأ الشائعة التالية.

خطأ: "خطأ الخادم"

إذا فشل تشغيل سير عمل لفحص التعليمات البرمجية بسبب خطأ في الخادم، فقد تكون مشكلة الاتصال العابرة هي السبب. حاول تشغيل سير العمل مرة أخرى. إذا استمرت المشكلة، فاتصل بدعم GitHub.

خطأ: "نفاد القرص" أو "نفاد الذاكرة"

قد نفدت ذاكرة CodeQL أو القرص على المشغل للمشاريع الكبيرة جدا. إذا كان مشغل GitHub Actions مستضافا، فاتصل بدعم GitHub للتحقيق في المشكلة. إذا كان مشغلا مستضافا ذاتيا، فقد تحتاج إلى إجراء تعديلات على مواصفات الخادم. لمزيد من المعلومات، راجع وثائق CodeQL حول الأجهزة الموصى بها لتشغيل CodeQL.

خطأ: 403 "المورد لا يمكن الوصول إليه عن طريق التكامل" عند استخدام Dependabot

يعتبر Dependabot غير موثوق به عندما يقوم بتشغيل سير عمل. يتم تشغيل سير العمل مع نطاقات للقراءة فقط. عادة ما يتطلب تحميل نتائج فحص التعليمات البرمجية لفرع ما security_events: write scope. ومع ذلك، يسمح فحص التعليمات البرمجية دائما بتحميل النتائج عندما يقوم حدث pull_request بتشغيل الإجراء. بالنسبة لفروع Dependabot، نوصي باستخدام الحدث pull_request بدلا من الحدث push.

تتمثل الطريقة البسيطة في التشغيل على الدفعات إلى الفرع الافتراضي وأي فروع مهمة أخرى طويلة الأمد، جنبا إلى جنب مع طلبات السحب المفتوحة مقابل هذه المجموعة من الفروع.

فيما يلي مثال:

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

خطأ: "تم رفض تحميل SARIF بسبب الإعداد الافتراضي"

يتم حظر تحميلات SARIF عند تمكين الإعداد الافتراضي CodeQL. يحدث هذا الخطأ عندما تحاول عملية تحميل ملف SARIF يحتوي على نتائج تحليل CodeQL إلى مستودع مع تمكين الإعداد الافتراضي. يحدث الخطأ أيضا إذا تم التحميل من خلال واجهة برمجة تطبيقات REST وCodeQL CLI. هذه الكتلة موجودة لتقليل احتمالية ارتباك المستخدم عندما تنشئ أنظمة متعددة تنبيهات مماثلة لفحص التعليمات البرمجية.

يحدث هذا الخطأ فقط لملفات SARIF التي تحتوي على النتائج التي تقوم بإنشائها باستخدام CodeQL. لإصلاح هذا الخطأ، قم بتعطيل CodeQL في المستودع ثم أعد محاولة تحميل ملف SARIF.

قراءة إضافية

لمزيد من المعلومات حول استكشاف الأخطاء وإصلاحها، راجع وثائق CodeQL لاستكشاف أخطاء فحص التعليمات البرمجية وإصلاحها.