Menggunakan PVS-Studio ketika memeriksa proyek-proyek Unreal Engine pada sistem operasi Windows

Gambar 2

Artikel ini dikhususkan untuk fitur-fitur pengecekan proyek-proyek Unreal Engine menggunakan penganalisis statis PVS-Studio pada sistem operasi Windows: cara menginstal penganalisis, cara memeriksa proyek, di mana dan bagaimana melihat laporan kesalahan.

Bagian integral dari siklus artikel kami adalah topik dengan satu atau lain cara yang terkait dengan industri game. Memeriksa mesin fisik yang digunakan dalam game AAA - silakan membuat kesalahan teratas di industri game - untuk kesehatan Anda , menemukan bug di salah satu mesin game paling populer - Unreal Engine (UE) - mudah . Saat mengembangkan gim, juga saat menulis aplikasi lain, kualitas kodenya penting. Kesalahan paling baik ditemukan sedini mungkin dan disarankan untuk melakukan ini secara otomatis - di sinilah penganalisa kode statis membantu para programmer.

Pada artikel ini saya akan mencoba untuk berbicara singkat tentang bagaimana Anda dapat menggunakan analisa statis PVS-Studio untuk menganalisis proyek yang dibuat di UE. PVS-Studio akan membantu membuat kode proyek Anda lebih baik dengan menemukan kesalahan di dalamnya, sehingga memungkinkan Anda untuk mengurangi waktu yang dihabiskan untuk meninjau kode.

Harap dicatat bahwa artikel ini merupakan tambahan untuk dokumentasi yang ada pada analisis proyek UE dan tidak melayani tujuan menggantinya, sebagian besar meminjam isi dokumentasi.

Instal PVS-Studio


Cara termudah untuk menginstal analyzer PVS-Studio adalah dengan mengunduh file instalasinya . Untuk dapat menganalisis proyek yang dibuat di UE, saat memasang PVS-Studio Anda harus memilih komponen berikut: "Pemantauan Kompiler C dan C ++" dan "Integrasi dengan Microsoft Visual Studio (Visual C ++ / C #)". Item terakhir bertanggung jawab untuk integrasi plug-in PVS-Studio ke dalam Visual Studio IDE, di mana nyaman untuk bekerja dengan log kesalahan dan dengan pengaturan umum dari alat analisa itu sendiri.

Untuk sepenuhnya bekerja dengan PVS-Studio, Anda harus memasukkan lisensi. Ini dapat dilakukan dengan membuka Visual Studio IDE (VS) dan memasukkan lisensi di jendela 'PVS-Studio | Pilihan ... | Pendaftaran'. Di VS 2019, menu PVS-Studio telah dihapus di menu 'Extensions', sehingga jalur ke jendela entri lisensi akan terlihat seperti ini: 'Ekstensi' | 'PVS-Studio | Pilihan ... | Pendaftaran'. Lisensi dapat diperoleh di situs web kami.

Untuk membangun proyek UE, bukan sistem perakitan standar yang digunakan dalam VS - MSBuild yang digunakan, tetapi program sendiri dari Epic Games yang bertanggung jawab untuk perakitan - UnrealBuildTool (UBT). Dalam hal ini, plugin PVS-Studio tidak dapat mengimplementasikan skrip yang biasa untuk memeriksa proyek C ++ / C # yang dibuat dalam VS: "PVS-Studio -> Periksa -> Proyek Saat Ini". Ada beberapa solusi untuk mengatasi keterbatasan ini.

Melakukan analisis menggunakan sistem pemantauan kompilasi


Cara pertama dan termudah untuk memeriksa proyek UE dapat dilakukan dengan menggunakan program Pemantauan Kompiler C dan C ++ (disebut Standalone.exe), yang terletak di direktori instalasi PVS-Studio. Prinsip kerjanya adalah memonitor proses yang berhubungan dengan kompiler target (cl.exe dalam kasus ini) dan mengumpulkan semua informasi yang diperlukan untuk preprocessing dan analisis lebih lanjut dari file sumber. Setelah Anda membuka C dan C ++ Compiler Monitoring, gunakan menu "Tools" dan pilih opsi "Analisis File Anda (C dan C ++) ...". Tekan tombol "Mulai Pemantauan" dan Anda akan melihat jendela muncul di sudut kiri bawah layar yang menginformasikan bahwa panggilan kompiler sedang dipantau:

Gambar 1

Selanjutnya, bangun proyek UE Anda dan tekan tombol "Stop Monitoring".

Setelah itu, analisis file sumber yang telah dikompilasi akan dimulai. Laporan peringatan yang ditemukan akan ditampilkan di jendela Output Analyzer dari program Pemantauan Kompiler C dan C ++.

Pelacakan serupa panggilan kompiler dan analisis selanjutnya dari file yang diterima dapat dilakukan dengan menggunakan program konsol CLMonitor.exe yang terletak di folder yang sama di mana PVS-Studio diinstal. CLMonitor.exe memiliki dua mode operasi: mode server (saat pelacakan dimulai dari proses yang sesuai dengan kompiler target) dan mode klien (saat menganalisis file sumber yang diterima pada tahap pelacakan dan menghasilkan laporan tentang hasil analisis). Untuk menjalankan CLMonitor.exe dalam mode server, jalankan perintah berikut:

CLMonitor.exe monitor 

Setelah itu, bangun proyek UE Anda dan jalankan perintah di bawah ini:

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

Perintah "menganalisis" meluncurkan CLMonitor.exe dalam mode klien dan menutup instance yang berjalan dari program ini yang bekerja dalam mode server. Setelah menjalankan perintah ini, CLMonitor.exe akan mulai menganalisis file. Parameter untuk opsi "- l" adalah path ke file di mana hasil analisa akan ditulis.

Melakukan Analisis Menggunakan -StaticAnalyzer = Kunci PVSStudio


Alternatif dan pendekatan yang lebih mudah untuk analisis proyek UE adalah integrasi langsung dengan sistem perakitan UBT. Untuk melakukan ini, di VS, buka jendela properti proyek UE Anda dan pilih "NMake" di daftar "Properti Konfigurasi". Tambahkan -StaticAnalyzer = flag PVSStudio ke kotak teks properti Build Command Line. Sebagai contoh, nilai bidang "Bangun Baris Perintah" mungkin terlihat seperti ini:

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

Perlu dipertimbangkan bahwa sekarang ketika melakukan perakitan proyek, hanya analisis yang akan dilakukan, tetapi perakitan itu sendiri tidak akan dilakukan. Skenario di mana perakitan dan analisis selanjutnya dilakukan akan dijelaskan di bawah ini. Perlu juga dipahami bahwa hanya file sumber yang telah dimodifikasi sejak pembangunan terakhir proyek yang dianalisis (jika ada file .h plug-in yang telah diubah, ini tidak akan menjadi alasan untuk analisis selama pembangunan berikutnya). Untuk melakukan analisis penuh, Anda perlu menambahkan bendera yang sama ke bidang teks dari properti "Rebuild All Command Line". Sekarang, ketika Anda membangun kembali proyek, Anda mendapatkan hasil analisis seluruh proyek.

Script analisis melalui memodifikasi file batch


Sekarang mari kita lihat skenario lain untuk mengintegrasikan analisa PVS-Studio ke dalam sistem perakitan UBT, di mana analisis dimulai segera setelah proyek dibangun / dipasang kembali, yaitu, pada output Anda mendapatkan baik proyek yang dirakit dan file hasil analisis. Seperti yang mungkin telah Anda perhatikan, bidang Bangun Perintah Baris berisi lintasan ke file kumpulan Build.bat, yang pada gilirannya berisi instruksi untuk memulai UBT dengan argumen yang diperlukan. Build.bat dimulai pada awal membangun.

Idenya adalah untuk mengubah file batch sehingga pertama kali memulai UBT dengan argumen build standar, dan jika fase build berhasil diselesaikan, jalankan UBT yang sama lagi, tetapi dengan flag tambahan -StaticAnalyzer = PVSStudio. Untuk menerapkan skenario di atas, Anda dapat memodifikasi file batch Build.bat (dan yang terbaik adalah membuat salinan dengan nama, misalnya, BuildAndAnalyze.bat) sebagai berikut. Segera setelah perintah popd, masukkan instruksi berikut:

 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!" ) 

Jika flag -StaticAnalyzer = PVSStudio sebelumnya disetel di bidang Bangun Baris Perintah dalam pengaturan proyek 'Properties | Configuration Properties | NMake', maka itu harus dihapus.

Masalah dengan pendekatan ini adalah bahwa hanya file-file yang dikompilasi selama fase build akan dianalisis. Artinya, Anda tidak akan menerima file laporan dengan pemeriksaan penuh proyek Anda. Selain itu, segala perubahan yang dilakukan pada file header .h yang disertakan juga tidak akan diperhitungkan. Oleh karena itu, kami tidak dapat menyebut analisis tambahan seperti itu, karena perubahan pada file header tidak akan mengarah pada analisis yang dilakukan selama perakitan baru. Dalam hal ini, Anda dapat membangun kembali proyek, memperoleh hasil analisis untuk seluruh proyek. Namun, mungkin butuh waktu lama untuk menyelesaikan perakitan, sehingga Anda dapat mengikuti skenario berikut: membangun, menghapus file cache - ActionHistory.bin, mulai perakitan dengan bendera -StaticAnalyzer = PVSStudio, dan mengembalikan file cache. File ActionHistory.bin berisi informasi yang diperlukan untuk melakukan rakitan tambahan, serta riwayat startup penganalisis untuk file yang dipindai.

Pada pandangan pertama, skenario ini tampaknya bukan yang termudah, jadi kami akan memberikan satu set instruksi lengkap tentang bagaimana Anda dapat memodifikasi file Build.bat yang asli. Perlu dicatat bahwa perubahan tersebut hanya relevan untuk Unreal Engine versi 4.21 dan lebih tinggi. Setelah perintah setlocal enabledelayedexpansion, deklarasikan variabel-variabel berikut:

 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%" 

Segera setelah pernyataan popd, masukkan perintah ini:
 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% ) ) 

Perhatikan bahwa variabel PROJECT_NAME, PLATFORM, dan UPROJECT_FILE diperlukan untuk menentukan jalur cache yang benar untuk mendapatkan nilainya dari argumen baris perintah Build.bat. Jika Anda memiliki urutan argumen yang berbeda, maka Anda harus mengubah inisialisasi ketiga variabel yang dijelaskan di atas.

Analisis proyek tambahan melalui modifikasi UBT


PVS-Studio dapat bekerja dalam mode analisis tambahan. Analisis tambahan dimaksudkan untuk memeriksa hanya file sumber yang telah dimodifikasi sejak pembangunan terakhir proyek. Dalam mode analisis tambahan, PVS-Studio secara otomatis dimulai di latar belakang pada mesin pengembang segera setelah mengkompilasi kode dan menganalisis semua file yang dipengaruhi oleh modifikasi. Anda dapat menemukan panduan yang lebih rinci tentang penggunaan PVS-Studio dalam mode analisis tambahan dalam dokumentasi kami.

Dengan penerapan mode analisis tambahan untuk proyek UE, semuanya kembali sedikit lebih rumit daripada dengan skenario kerja standar. Dalam hal ini, untuk dapat melakukan analisis tambahan (dengan mempertimbangkan perubahan akun pada file .h yang terhubung), Anda harus membuat sendiri perubahan pada sistem perakitan UBT. Untuk melakukan ini, akses repositori UE di github.com dan clone ke mesin Anda. Untuk lebih lanjut mengkonfigurasi repositori yang dikloning, Anda harus mengikuti langkah-langkah yang tercantum di bagian "Bangun dan jalankan" pada subkunci "Windows". Anda dapat menemukan bagian yang disebutkan di halaman utama repositori resmi UE. Setelah menyiapkan repositori, Anda dapat mulai membuat perubahan pada UBT. Untuk melakukannya, buka jalur berikut di repositori hasil kloning: \ UnrealEngine \ Engine \ Source \ Programs \ UnrealBuildTool. Buka solusi UnrealBuildTool.sln dan di jendela Solution Explorer cari file PVSToolChain.cs. Dalam file ini, tambahkan baris kode berikut ke kelas PVSApplicationSettings:

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

Baris kode ini memungkinkan opsi IncrementalAnalysis dideeralisasi dari file pengaturan PVS-Studio. Jangan lupa untuk mengaktifkan mode analisis inkremental PVS-Studio sendiri.Untuk melakukan ini, buka item menu utama Extensions dalam VS, submenu PVS-Studio, Analisis setelah Pembuatan (Hanya File yang Diubah), Diaktifkan. Sekarang tambahkan baris kode berikut segera setelah mendeklarasikan variabel 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; } } 

Setelah itu, hapus deklarasi variabel sebelumnya OutputFileLocation dan OutputFileItem di bawah ini dalam kode.

Selama proses perakitan proyek UE, file objek .obj dihasilkan untuk setiap file .cpp sumber. Gagasan analisis tambahan ini adalah untuk memeriksa hanya file .cpp sumber yang tanggal pembuatan / modifikasi file objeknya lebih baru daripada file laporan .pvslog (untuk setiap file sumber, file .pvslog sendiri dihasilkan, di masa depan semuanya File .pvslog akan digabung menjadi satu .pvslog akhir). Setelah Anda membuat perubahan di atas, kompilasi UBT dan salin biner yang baru dikumpulkan ke lokasi UBT asli.

Semuanya siap, sekarang ketika Anda menyelesaikan perakitan proyek UE, Anda akan menerima laporan log yang berisi hasil analisis hanya untuk file sumber yang telah mengalami kompilasi. Ingat bahwa modifikasi UBT hanya masuk akal jika Anda memodifikasi file Build.bat sehingga menghapus file cache ActionHistory.bin (deskripsi terperinci dari skenario ini telah dijelaskan di atas). Untuk menonaktifkan mode analisis tambahan, cukup setel opsi "Analisis setelah Pembuatan (Hanya File yang Dimodifikasi)" yang dijelaskan di atas ke "Dinonaktifkan".

Biarkan saya mengingatkan Anda sekali lagi: jika Anda mengatur flag -StaticAnalyzer = PVSStudio di bidang Build Command Line di pengaturan proyek 'Properties | Configuration Properties | NMake', maka Anda harus menghapusnya dalam skenario ini.

Membuka file laporan analisa dan pemuatan otomatisnya di Visual Studio


Secara default, saat menganalisis UE proyek, file laporan tidak dimuat ke jendela PVS-Studio di VS. Itu hanya disimpan relatif ke folder proyek di jalur berikut: \ YouProject \ Saved \ PVS-Studio \. Untuk membuka file ini dalam VS, Anda harus menggunakan perintah berikut: 'PVS-Studio | Open / Save | Open Analysis Report' dan atur opsi 'Unparsed output' di opsi pemilihan jenis file. Anda juga dapat membuka file laporan di program Pemantauan Kompiler C dan C ++ menggunakan perintah ini: 'File | Open PVS-Studio Log' dan juga pilih jenis file 'Keluaran yang tidak diurai'.

Ada opsi yang lebih nyaman untuk membuka log analisis - secara otomatis dimasukkan ke dalam VS. Untuk secara otomatis memuatnya ke jendela PVS-Studio di VS setelah analisis selesai, Anda harus mengaktifkan opsi yang sesuai: 'PVS-Studio | Opsi | Pengaturan Analisis Spesifik | Hemat / Muat (laporan penganalisa) | AutoloadUnrealEngineLog'.

Unduh dan coba alat analisa PVS-Studio


Saya, sebagai penulis artikel ini dan sebagai salah satu dari orang-orang yang secara langsung bekerja pada implementasi dan dukungan fungsionalitas PVS-Studio terkait dengan analisis proyek yang dibangun berdasarkan mesin UE, saya siap membantu pembaca. Jika Anda mengalami kesulitan menggunakan PVS-Studio dengan proyek UE Anda atau memiliki pertanyaan yang Anda tidak dapat menemukan jawaban dalam artikel ini, maka saya akan senang untuk berbicara dengan Anda. Menulis kepada kami dalam dukungan dan surat akan diserahkan kepada saya mengenai UE dan masalah terkait. Terima kasih atas perhatian anda

Tautan situs


  1. Andrey Karpov. Pemeriksaan Unreal Engine 4 yang telah lama dinanti . (14 April 2014)
  2. Pavel Eremeev, Svyatoslav Razmyslov. Bagaimana tim PVS-Studio meningkatkan kode Unreal Engine . (20 Juni 2015)
  3. Andrey Karpov. Analisis statis sebagai bagian dari proses pengembangan Unreal Engine . (27 Juni 2017)


Jika Anda ingin berbagi artikel ini dengan audiens yang berbahasa Inggris, silakan gunakan tautan ke terjemahan: Ilya Gainulin. Penggunaan PVS-Studio saat Memeriksa Proyek Mesin Tidak Nyata pada OS Windows .

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


All Articles