استخدام PVS-Studio عند التحقق من مشاريع Unreal Engine على نظام التشغيل Windows

الصورة 2

تم تخصيص هذه المقالة لميزات التحقق من مشاريع Unreal Engine باستخدام محلل ثابت PVS-Studio على نظام تشغيل Windows: كيفية تثبيت المحلل ، وكيفية التحقق من المشروع ، ومكان وكيفية عرض تقرير الخطأ.

جزء لا يتجزأ من دورة مقالاتنا هي الموضوعات بطريقة أو بأخرى تتعلق بصناعة الألعاب. من السهل التحقق من المحرك الفعلي المستخدم في ألعاب AAA - يرجى ارتكاب الأخطاء الكبرى في صناعة الألعاب - لصحتك ، وإيجاد الأخطاء في أحد أكثر محركات الألعاب شيوعًا - Unreal Engine (UE). عند تطوير الألعاب ، وكذلك عند كتابة أي تطبيقات أخرى ، فإن جودة الكود مهمة. من الأفضل العثور على الأخطاء في أقرب وقت ممكن ، ومن المستحسن القيام بذلك تلقائيًا - وهذا هو المكان الذي يقدم فيه محللو الكود الثابت مساعدة المبرمجين.

سأحاول في هذه المقالة التحدث بإيجاز عن كيفية استخدام محلل ثابت PVS-Studio لتحليل المشاريع التي تم إنشاؤها في UE. سيساعد PVS-Studio في تحسين رمز مشاريعك من خلال العثور على أخطاء فيها ، مما يتيح لك تقليل الوقت الذي تستغرقه مراجعة التعليمات البرمجية.

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

تثبيت PVS-Studio


أسهل طريقة لتثبيت محلل PVS-Studio هي تنزيل ملف التثبيت الخاص به. لكي تتمكن من تحليل المشاريع التي تم إنشاؤها في UE ، عند تثبيت PVS-Studio ، تحتاج إلى تحديد المكونات التالية: "C و C ++ Compiler Monitor" و "Integration with Microsoft Visual Studio (Visual C ++ / C #)". العنصر الأخير مسؤول عن دمج المكوّن الإضافي لـ PVS-Studio في IDE Visual Studio ، والذي من خلاله يكون من المناسب العمل مع سجل الأخطاء والإعدادات العامة للمحلل نفسه.

للعمل بشكل كامل مع PVS-Studio ، يجب عليك إدخال ترخيص. يمكن القيام بذلك عن طريق فتح Visual Studio IDE (VS) وإدخال الترخيص في نافذة "PVS-Studio | Options ... | Registration". في VS 2019 ، تمت إزالة قائمة PVS-Studio في قائمة "الامتدادات" ، وبالتالي فإن المسار إلى نافذة إدخال الترخيص سيبدو كما يلي: "الامتدادات" | "PVS-Studio | الخيارات ... | التسجيل". يمكن الحصول على الترخيص على موقعنا.

لإنشاء مشاريع UE ، لا يتم استخدام نظام التجميع القياسي المستخدم في VS - MSBuild ، ولكن يتم استخدام البرنامج الخاص من Epic Games المسؤول عن التجميع - UnrealBuildTool (UBT). في هذا الصدد ، لا يتمكن المكون الإضافي لـ PVS-Studio من تنفيذ البرنامج النصي المعتاد لفحص مشاريع C ++ / C # التي تم إنشاؤها في VS: "PVS-Studio -> Check -> المشروع الحالي". هناك العديد من الحلول لحل هذا القيد.

إجراء التحليل باستخدام نظام مراقبة التجميع


يمكن إجراء أول وأسهل طريقة للتحقق من UE للمشروع باستخدام برنامج مراقبة C و C ++ (يسمى Standalone.exe) ، الموجود في دليل تثبيت PVS-Studio. مبدأ عملها هو أنها تراقب عمليات إطلاق العمليات المتوافقة مع برنامج التحويل البرمجي الهدف (cl.exe في هذه الحالة) وتجمع جميع المعلومات اللازمة للمعالجة المسبقة والتحليل الإضافي للملفات المصدر. بعد فتح مراقبة برنامج التحويل البرمجي لـ C و C ++ ، استخدم قائمة "أدوات" وحدد الخيار "تحليل ملفاتك (C و C ++) ...". اضغط على زر "بدء المراقبة" وسترى نافذة تظهر في الركن الأيسر السفلي من الشاشة لإعلامك بأن مكالمات برنامج التحويل البرمجي تتم مراقبتها:

الصورة 1

بعد ذلك ، قم ببناء مشروع UE الخاص بك واضغط على مفتاح "Stop Monitoring".

بعد ذلك ، سيبدأ تحليل الملفات المصدر التي تم تجميعها. سيتم عرض تقرير بالتحذيرات الموجودة في نافذة Analyzer Output الخاصة ببرنامج مراقبة المحول البرمجي C و C ++.

يمكن إجراء تتبع مماثل لمكالمات برنامج التحويل البرمجي والتحليل اللاحق للملفات المستلمة باستخدام برنامج وحدة التحكم CLMonitor.exe الموجود في نفس المجلد حيث تم تثبيت PVS-Studio. يشتمل CLMonitor.exe على وضعي تشغيل: وضع الخادم (عند تتبع بدء العمليات المتوافقة مع برنامج التحويل البرمجي الهدف) ووضع العميل (عند تحليل الملفات المصدر المستلمة في مرحلة التتبع وإنشاء تقرير عن نتائج التحليل). لتشغيل CLMonitor.exe في وضع الخادم ، قم بتشغيل الأمر التالي:

CLMonitor.exe monitor 

بعد ذلك ، قم ببناء مشروع UE الخاص بك وقم بتشغيل الأمر أدناه:

 CLMonitor.exe analyze -l "c:\ptest.plog" 

يقوم الأمر "تحليل" بتشغيل CLMonitor.exe في وضع العميل وإغلاق مثيل تشغيل هذا البرنامج الذي يعمل في وضع الخادم. بعد تنفيذ هذا الأمر ، سيبدأ CLMonitor.exe في تحليل الملفات. المعلمة الخاصة بخيار "- l" هي المسار إلى الملف الذي سيتم كتابة نتائج المحلل فيه.

إجراء التحليل باستخدام -StaticAnalyzer = مفتاح PVSStudio


يتمثل النهج البديل والأكثر ملاءمة لتحليل مشاريع UE في التكامل المباشر مع نظام تجميع UBT. للقيام بذلك ، في VS ، افتح نافذة الخصائص لمشروع UE الخاص بك وحدد "NMake" في قائمة "خصائص التكوين". أضف -StaticAnalyzer = إشارة PVSStudio إلى مربع النص خاصية سطر الأوامر Build. كمثال ، قد تبدو قيمة الحقل "Build Command Line" كما يلي:

 C:\Program Files\Epic Games\UE_4.22\Engine\Build\BatchFiles\Build.bat" MyProject Win64 DebugGame -Project="$(SolutionDir)$(ProjectName).uproject" -WaitMutex -FromMsBuild -StaticAnalyzer=PVSStudio 

تجدر الإشارة إلى أنه الآن عند إجراء تجميع المشروع ، سيتم إجراء التحليل فقط ، ولكن التجميع نفسه لن يتم تنفيذه. سيتم شرح سيناريو يتم فيه إجراء التجميع والتحليل اللاحق أدناه. من الضروري أيضًا فهم أنه لم يتم تحليل سوى ملفات المصدر التي تم تعديلها منذ الإصدار الأخير من المشروع (في حالة تغيير أي ملف .h مكون إضافي ، فلن يكون هذا هو سبب التحليل أثناء الإنشاء التالي). من أجل إجراء تحليل كامل ، تحتاج إلى إضافة العلامة نفسها إلى حقل النص الخاص بخاصية "Rebuild All Command Line". الآن ، عند إعادة بناء المشروع ، تحصل على نتيجة تحليل المشروع بأكمله.

تحليل البرنامج النصي من خلال تعديل الملفات الدفعية


الآن ، دعونا نلقي نظرة على سيناريو آخر لإدماج محلل PVS-Studio في نظام تجميع UBT ، والذي يبدأ فيه التحليل فورًا بعد بناء / إعادة تجميع المشروع ، أي أنك تحصل على كل من المشروع المجمع وملف نتائج التحليل. كما قد تلاحظ ، يحتوي حقل سطر الأوامر Build على المسار إلى ملف دفعي Build.bat ، والذي بدوره يحتوي على إرشادات لبدء UBT باستخدام الوسائط الضرورية. يبدأ Build.bat في بداية الإنشاء.

تتمثل الفكرة في تغيير ملف الدُفعات بحيث يبدأ UBT أولاً باستخدام وسيطات الإنشاء القياسية ، وإذا تم إكمال مرحلة الإنشاء بنجاح ، فقم بتشغيل نفس UBT مرة أخرى ، ولكن باستخدام العلامة الإضافية -StaticAnalyzer = PVSStudio. لتطبيق السيناريو أعلاه ، يمكنك تعديل الملف الدفعي Build.bat (ومن الأفضل إنشاء نسخة بالاسم ، على سبيل المثال ، BuildAndAnalyze.bat) كما يلي. مباشرة بعد الأمر popd ، أدخل الإرشادات التالية:

 SET "UBT_ERR_LEVEL=!ERRORLEVEL!" SET "NEED_TO_PERFORM_ANALYSIS" IF "!UBT_ERR_LEVEL!"=="0" ( SET "NEED_TO_PERFORM_ANALYSIS=TRUE" ) IF "!UBT_ERR_LEVEL!"=="2" ( SET "NEED_TO_PERFORM_ANALYSIS=TRUE" ) IF DEFINED NEED_TO_PERFORM_ANALYSIS ( pushd "%~dp0\..\..\Source" ECHO Running static analysis ..\..\Engine\Binaries\DotNET\UnrealBuildTool.exe %* -StaticAnalyzer=PVSStudio -DEPLOY popd SET "UBT_ERR_LEVEL=!ERRORLEVEL!" ) 

إذا تم تعيين علامة -StaticAnalyzer = PVSStudio مسبقًا في حقل Build Command Line في إعدادات المشروع "خصائص | خصائص التكوين | NMake" ، فيجب إزالتها.

المشكلة في هذا الأسلوب هي أنه سيتم فقط تحليل تلك الملفات التي تم تجميعها أثناء مرحلة الإنشاء. أي أنك لن تتلقى ملف تقرير مع فحص كامل لمشروعك. بالإضافة إلى ذلك ، لن يتم أيضًا مراعاة أي تغييرات تم إجراؤها على ملفات رأس .h المضمنة. لذلك ، لا يمكننا أن نطلق على مثل هذا التحليل التزايدي ، حيث أن التغييرات في ملفات الرأس لن تؤدي إلى إجراء التحليل أثناء التجميع الجديد. في هذه الحالة ، يمكنك إعادة إنشاء المشروع ، والحصول على نتيجة تحليل للمشروع بأكمله. ومع ذلك ، قد يستغرق إكمال التجميع وقتًا طويلاً ، حتى تتمكن من اتباع السيناريو التالي: إنشاء ملف التخزين المؤقت وحذفه - ActionHistory.bin ، وبدء التجميع باستخدام علامة -StaticAnalyzer = PVSStudio واستعادة ملف ذاكرة التخزين المؤقت. يحتوي ملف ActionHistory.bin على المعلومات اللازمة لأداء التجميعات الإضافية ، بالإضافة إلى محفوظات بدء تشغيل المحلل للملفات الممسوحة ضوئيًا.

للوهلة الأولى ، قد لا يبدو هذا السيناريو هو الأسهل ، لذلك سنقدم مجموعة كاملة من الإرشادات حول كيفية تعديل ملف Build.bat الأصلي. تجدر الإشارة إلى أن هذه التغييرات ذات صلة فقط بالإصدار 4.21 من Unreal Engine والإصدارات الأحدث. بعد الأمر setlocal enableelayedexpansion ، قم بتعريف المتغيرات التالية:

 SET PROJECT_NAME=%1% SET PLATFORM=%2% SET UPROJECT_FILE=%~5 SET ACTIONHISTORY_FOLDER= %UPROJECT_FILE%\..\Intermediate\Build\%PLATFORM%\%PROJECT_NAME% SET ACTION_HISTORY=ActionHistory.bin SET ACTION_HISTORY_BAC=%ACTION_HISTORY%.bac SET ACTIONHISTORY_PATH="%ACTIONHISTORY_FOLDER%\%ACTION_HISTORY%" SET ACTIONHISTORY_BAC_PATH= "%ACTIONHISTORY_FOLDER%\%ACTION_HISTORY_BAC%" 

مباشرة بعد عبارة popd ، أدخل هذه الأوامر:
 SET "UBT_ERR_LEVEL=!ERRORLEVEL!" SET "NEED_TO_PERFORM_ANALYSIS=" IF "!UBT_ERR_LEVEL!"=="0" ( SET "NEED_TO_PERFORM_ANALYSIS=TRUE" ) IF "!UBT_ERR_LEVEL!"=="2" ( SET "NEED_TO_PERFORM_ANALYSIS=TRUE" ) IF DEFINED NEED_TO_PERFORM_ANALYSIS ( pushd "%~dp0\..\..\Source" ECHO Running static analysis IF EXIST %ACTIONHISTORY_PATH% ( ECHO Copying %ACTION_HISTORY% to %ACTION_HISTORY_BAC% COPY %ACTIONHISTORY_PATH% %ACTIONHISTORY_BAC_PATH% ECHO Removing %ACTION_HISTORY%: %ACTIONHISTORY_PATH% DEL %ACTIONHISTORY_PATH% ) ..\..\Engine\Binaries\DotNET\UnrealBuildTool.exe %* -StaticAnalyzer=PVSStudio -DEPLOY popd SET "UBT_ERR_LEVEL=!ERRORLEVEL!" IF EXIST %ACTIONHISTORY_BAC_PATH% ( ECHO Recovering %ACTION_HISTORY% COPY %ACTIONHISTORY_BAC_PATH% %ACTIONHISTORY_PATH% ECHO Removing %ACTION_HISTORY_BAC%: %ACTIONHISTORY_BAC_PATH% DEL %ACTIONHISTORY_BAC_PATH% ) ) 

لاحظ أن المتغيرات PROJECT_NAME و PLATFORM و UPROJECT_FILE اللازمة لتحديد المسار إلى ملف التخزين المؤقت بشكل صحيح تحصل على قيمها من وسائط سطر الأوامر Build.bat. إذا كان لديك ترتيب مختلف لهذه الوسائط ، فيجب عليك تغيير تهيئة المتغيرات الثلاثة الموضحة أعلاه وفقًا لذلك.

تحليل مشروع تدريجي من خلال تعديل UBT


يمكن أن يعمل PVS-Studio في وضع التحليل التزايدي. يهدف التحليل التزايدي إلى التحقق فقط من ملفات المصدر التي تم تعديلها منذ الإصدار الأخير من المشروع. في وضع التحليل التزايدي ، يبدأ PVS-Studio تلقائيًا في الخلفية على جهاز المطور فور تجميع الشفرة وتحليل جميع الملفات المتأثرة بالتعديلات. يمكنك العثور على دليل أكثر تفصيلاً حول استخدام PVS-Studio في وضع التحليل التزايدي في وثائقنا.

مع تنفيذ وضع التحليل الإضافي لمشاريع UE ، أصبح كل شيء أكثر تعقيدًا من سيناريو العمل القياسي. في هذه الحالة ، لكي تتمكن من إجراء تحليل تدريجي (مع مراعاة التغييرات في ملفات .h المتصلة) ، سيكون عليك إجراء تغييرات على نظام تجميع UBT بنفسك. للقيام بذلك ، قم بالوصول إلى مستودع UE على github.com واستنساخه إلى جهازك. لتكوين مستودع المستنسخة بشكل إضافي ، تحتاج إلى اتباع الخطوات المذكورة في قسم "بدء التشغيل" في القسم الفرعي "Windows". يمكنك العثور على القسم المذكور في الصفحة الرئيسية لمستودع UE الرسمي. بمجرد إعداد مستودعك ، يمكنك البدء في إجراء تغييرات على UBT. للقيام بذلك ، انتقل إلى المسار التالي في مستودع النسخ: \ UnrealEngine \ Engine \ Source \ Programs \ UnrealBuildTool. افتح الحل UnrealBuildTool.sln وفي إطار Solution Explorer ، ابحث عن الملف PVSToolChain.cs. في هذا الملف ، أضف سطور التعليمات البرمجية التالية إلى فئة PVSApplicationSettings:

 /// <summary> /// Whether need incremental analysis or not /// </summary> public bool IncrementalAnalysis; 

يسمح سطر التعليمات البرمجية هذا بإلغاء تحديد خيار IncrementalAnalysis من ملف إعدادات PVS-Studio. لا تنسَ تمكين وضع التحليل التزايدي PVS-Studio نفسه. للقيام بذلك ، افتح عنصر القائمة الرئيسي Extensions في VS ، القائمة الفرعية PVS-Studio ، التحليل بعد الإنشاء (الملفات المعدلة فقط) ، ممكّن. الآن قم بإضافة سطور التعليمات البرمجية التالية فور إعلان متغير BaseFileName:

 // Get pvslog file FileReference OutputFileLocation = FileReference. Combine(OutputDir, BaseFileName + ".pvslog"); FileItem OutputFileItem = FileItem.GetItemByFileReference(OutputFileLocation); if (ApplicationSettings.IncrementalAnalysis && OutputFileItem.Exists) { // Get object file FileReference ObjectFileLocation = FileReference. Combine(OutputDir, BaseFileName + ".obj"); FileItem ObjectFileItem = FileItem.GetItemByFileReference(ObjectFileLocation); if (ObjectFileItem.Exists && (ObjectFileItem.LastWriteTimeUtc < OutputFileItem.LastWriteTimeUtc)) { continue; } } 

بعد ذلك ، احذف التصريحات المتغيرة السابقة OutputFileLocation و OutputFileItem أدناه في التعليمات البرمجية.

أثناء عملية التجميع الخاصة بمشروع UE ، يتم إنشاء ملف كائن .obj لكل ملف .cpp مصدر. تتمثل فكرة هذا التحليل التزايدي في التحقق من ملفات .cpp المصدر فقط التي يكون تاريخ إنشاء / تعديل ملف الكائن الخاص بها أحدث من ملف تقرير .pvslog (لكل ملف مصدر يتم إنشاء ملف .pvslog الخاص به ، ثم كل شيء سيتم دمج ملفات .pvslog في ملف .pvslog نهائي واحد). بعد إجراء التغييرات المذكورة أعلاه ، قم بتجميع UBT ونسخ الثنائي الذي تم جمعه حديثًا إلى موقع UBT الأصلي.

كل شيء جاهز ، والآن عندما تكمل تجميع مشروع UE ، ستتلقى سجل تقارير يحتوي على نتائج المحلل فقط للملفات المصدر التي خضعت للتجميع. تذكر أن مثل هذا التعديل لـ UBT يكون منطقيًا فقط إذا قمت بتعديل ملف Build.bat بحيث يحذف ملف ذاكرة التخزين المؤقت ActionHistory.bin (تم وصف وصف تفصيلي لهذا السيناريو أعلاه). لتعطيل وضع التحليل التزايدي ، ما عليك سوى تعيين خيار "التحليل بعد الإنشاء (الملفات المعدلة فقط)" الموضح أعلاه على "معطل".

اسمحوا لي أن أذكرك مرة أخرى: إذا قمت بتعيين -StaticAnalyzer = علامة PVSStudio في حقل سطر أوامر البناء في إعدادات المشروع "خصائص | خصائص التكوين | NMake" ، فأنت بحاجة إلى إزالته في هذا السيناريو.

فتح ملف تقرير محلل والتحميل التلقائي في Visual Studio


بشكل افتراضي ، عند تحليل UE للمشروع ، لا يتم تحميل ملف التقرير في إطار PVS-Studio في VS. يتم حفظه ببساطة نسبة إلى مجلد المشروع في المسار التالي: \ YouProject \ Saved \ PVS-Studio \. لفتح هذا الملف في VS ، تحتاج إلى استخدام الأمر التالي: "PVS-Studio | فتح / حفظ | فتح تقرير التحليل" وتعيين خيار "الإخراج غير المحول" في خيار تحديد نوع الملف. يمكنك أيضًا فتح ملف التقرير في برنامج مراقبة برنامج التحويل البرمجي C و C ++ باستخدام هذا الأمر: "ملف | فتح سجل PVS-Studio" وأيضًا تحديد نوع الملف "إخراج غير محلول".

هناك خيار أكثر ملاءمة لفتح سجل التحليل - يتم تحميله تلقائيًا في VS. لتحميله تلقائيًا في نافذة PVS-Studio في VS بعد اكتمال التحليل ، تحتاج إلى تمكين الخيار المقابل: "PVS-Studio | الخيارات | إعدادات محلل محددة | حفظ / تحميل (تقرير محلل) | AutoloadUnrealEngineLog".

قم بتنزيل وتجربة محلل PVS-Studio


بصفتي مؤلف هذا المقال وكأحد هؤلاء الأشخاص الذين يعملون بشكل مباشر على تنفيذ ودعم وظيفة PVS-Studio المتعلقة بتحليل المشروعات القائمة على محرك UE ، أنا مستعد لمساعدة القراء. إذا واجهت أي صعوبات في استخدام PVS-Studio في مشروع UE أو لديك أي أسئلة لم تجد إجابة عليها في هذه المقالة ، فسوف يسعدني التحدث معك. اكتب إلينا في الدعم وسيتم تسليم الرسائل إلي فيما يتعلق UE والقضايا ذات الصلة. شكرا لاهتمامكم

روابط ذات صلة


  1. أندريه كاربوف. التحقق الذي طال انتظاره من محرك غير واقعي 4 . (14 أبريل 2014)
  2. بافل إريمييف ، سفياتوسلاف رازميسلوف. كيف قام فريق PVS-Studio بتحسين كود Unreal Engine . (20 يونيو 2015)
  3. أندريه كاربوف. تحليل ثابت كجزء من عملية تطوير محرك غير واقعي . (27 يونيو 2017)


إذا كنت ترغب في مشاركة هذه المقالة مع جمهور يتحدث الإنجليزية ، فالرجاء استخدام الرابط الخاص بالترجمة: Ilya Gainulin. استخدام PVS-Studio عند التحقق من مشروعات محرك غير واقعي على نظام التشغيل Windows .

Source: https://habr.com/ru/post/ar466479/


All Articles