CodeChecker เป็นโครงสร้างพื้นฐานการวิเคราะห์แบบคงที่ที่สร้างขึ้นบนเครื่องมือวิเคราะห์ LLVM/Clang แบบคงที่แทนการเปลี่ยน scan-build ในสภาพแวดล้อมการพัฒนา Linux หรือ MacOS (OS X)

ตรวจสอบการสาธิตของเราที่แสดงผลการวิเคราะห์บางอย่างของโครงการโอเพ่นซอร์ส!
ดำเนินการวิเคราะห์ แบบ clang-tidy , clang static static กับการวิเคราะห์หน่วยการแปลข้าม, การวิเคราะห์ทางสถิติ (เมื่อมีตัวตรวจสอบ), CPPCheck , GCC Static Analyzer และ เครื่องวิเคราะห์ FACEBOOK INFERZER
สร้างฐานข้อมูลการรวบรวม JSON โดย wiretapping กระบวนการสร้างใด ๆ (เช่น CodeChecker log -b "make" )
วิเคราะห์โครงการ GCC Cross-Compiled โดยอัตโนมัติ: การตรวจหา GCC หรือ Clang Compiler Configuration และสร้างการเรียกร้องการวิเคราะห์ Clang ที่สอดคล้องกัน
การวิเคราะห์ที่เพิ่มขึ้น: เฉพาะไฟล์ที่เปลี่ยนแปลงและการพึ่งพาของมันจะต้องวิเคราะห์ใหม่
การปราบปรามในเชิงบวกที่ผิดพลาดที่มีความเป็นไปได้ที่จะเพิ่มความคิดเห็นรีวิว
ผลลัพธ์การสร้างภาพข้อมูลในบรรทัดคำสั่งหรือใน HTML แบบคงที่
คุณสามารถจัดเก็บและแสดงภาพรายงานการวิเคราะห์นับพัน ของเครื่องวิเคราะห์หลายตัวเช่น clang analyzer (C/C ++), clang tidy (C/C ++), Facebook อนุมาน (C/C ++, Java), Clang Sanitizers (C/C ++), SpotBugs (Java), Pylint (Python)
สำหรับรายการที่สมบูรณ์โปรดดูเครื่องวิเคราะห์ที่รองรับ
เว็บแอปพลิเคชัน สำหรับการดูข้อบกพร่องของรหัสที่ค้นพบด้วยประสบการณ์ที่ง่ายขึ้นและง่ายดาย (พร้อม postgreSQL หรือแบ็กเอนด์ SQLite)
การรวม Gerrit และ Gitlab แสดงผลการวิเคราะห์เป็นบทวิจารณ์ Gitlab หรือ Gerrit
Filterable (ชื่อตรวจสอบข้อบกพร่อง, ความรุนแรง, เส้นทางต้นทาง, ... ) และ เทียบเท่า (คำนวณความแตกต่างระหว่างการวิเคราะห์สองรายการของโครงการแสดงให้เห็นว่าข้อบกพร่องใดได้รับการแก้ไขและแนะนำใหม่) การดูผลลัพธ์
โหมด Diff: นี่แสดงรายการข้อบกพร่องที่ได้รับการแนะนำตั้งแต่การดำเนินการวิเคราะห์ครั้งล่าสุดของคุณ
ผลลัพธ์สามารถแบ่งปันกับเพื่อนนักพัฒนา ความคิดเห็น และระบบ ตรวจสอบ ช่วยในการสื่อสารของข้อบกพร่องของรหัส
การสื่อสารกับลูกค้าเซิร์ฟเวอร์แบบประหยัดที่ใช้งานได้ง่ายใช้สำหรับการจัดเก็บและสอบถามข้อบกพร่องที่ค้นพบ
รองรับการสร้างภาพข้อมูลข้อผิดพลาดหลายอย่างเช่นเว็บแอปพลิเคชันเครื่องมือบรรทัดคำสั่งและปลั๊กอิน Eclipse
คำสั่ง CodeChecker มีคำสั่งย่อยจำนวนมากซึ่งสามารถใช้ตัวอย่างเพื่อบันทึกและวิเคราะห์โครงการของคุณพิมพ์ผลลัพธ์หรือเริ่มต้นเว็บเซิร์ฟเวอร์ สำหรับรายการทั้งหมดดูตารางต่อไปนี้หรือตรวจสอบข้อความช่วยเหลือของคำสั่งนี้ ( CodeChecker --help ):
คำสั่งย่อย CodeChecker | คำอธิบาย |
|---|---|
analyze | ดำเนินการวิเคราะห์รหัสที่รองรับสำหรับไฟล์ที่บันทึกไว้ในฐานข้อมูลการรวบรวม JSON |
analyzer-version | พิมพ์แพ็คเกจ CodeChecker Analyzer ที่ใช้งานอยู่ |
analyzers | รายการที่รองรับและเครื่องวิเคราะห์ที่มีอยู่ |
check | ทำการวิเคราะห์เกี่ยวกับโครงการและผลการพิมพ์เพื่อเอาต์พุตมาตรฐาน |
checkers | แสดงรายการตัวตรวจสอบที่มีอยู่สำหรับการวิเคราะห์รหัส |
cmd | ดูผลการวิเคราะห์บนเซิร์ฟเวอร์ที่กำลังทำงานจากบรรทัดคำสั่ง |
fixit | ใช้การแก้ไขอัตโนมัติตามคำแนะนำของเครื่องวิเคราะห์ |
log | เรียกใช้คำสั่ง build รวบรวมคำสั่งการรวบรวมที่ดำเนินการและจัดเก็บไว้ในไฟล์ JSON |
parse | สรุปการวิเคราะห์การพิมพ์และผลลัพธ์ในรูปแบบที่มนุษย์อ่านได้ |
server | เริ่มต้นและจัดการเว็บเซิร์ฟเวอร์ CodeChecker |
store | บันทึกผลการวิเคราะห์ลงในฐานข้อมูล |
version | พิมพ์แพ็คเกจ CodeChecker เวอร์ชันที่ใช้ |
web-version | พิมพ์แพ็คเกจเซิร์ฟเวอร์ CodeChecker ที่ใช้งานอยู่ |
คำสั่งย่อยของ CodeChecker cmd ยังมีคำสั่งย่อยอื่น ๆ อีกมากมายซึ่งสามารถใช้เพื่อรับข้อมูล (ผลิตภัณฑ์, การรัน, ผลลัพธ์, สถิติ) จากเซิร์ฟเวอร์ CodeChecker ที่กำลังทำงานอยู่ สำหรับรายการทั้งหมดดูตารางต่อไปนี้หรือตรวจสอบข้อความช่วยเหลือของคำสั่งย่อยนี้ ( CodeChecker cmd --help ):
คำสั่งย่อย CodeChecker cmd | คำอธิบาย |
|---|---|
runs | แสดงรายการการวิเคราะห์ที่มีอยู่ |
history | แสดงประวัติความเป็นมาของการวิ่งหลายครั้ง |
results | ผลการวิเคราะห์รายการ (การค้นหา) สรุปสำหรับการรันที่กำหนด |
diff | เปรียบเทียบการวิเคราะห์สองครั้งและแสดงความแตกต่าง |
sum | แสดงสถิติของหมากฮอส |
token | การเข้าถึงคำสั่งย่อยที่เกี่ยวข้องกับการกำหนดค่าโทเค็นการเข้าถึงส่วนบุคคลที่จัดการโดยเซิร์ฟเวอร์ CodeChecker |
del | ลบการวิเคราะห์ |
update | อัปเดตการวิเคราะห์ |
suppress | จัดการและนำเข้าการระงับรายงานบนเซิร์ฟเวอร์ CodeChecker |
products | การเข้าถึงคำสั่งย่อยที่เกี่ยวข้องกับการกำหนดค่าผลิตภัณฑ์ที่จัดการโดยเซิร์ฟเวอร์ CodeChecker |
components | การเข้าถึงคำสั่งย่อยที่เกี่ยวข้องกับการกำหนดค่าส่วนประกอบต้นทางที่จัดการโดยเซิร์ฟเวอร์ CodeChecker |
login | รับรองความถูกต้องในเซิร์ฟเวอร์ CodeChecker ที่ต้องการสิทธิ์ |
export | ส่งออกความคิดเห็นและสถานะการตรวจสอบจาก CodeChecker |
import | นำเข้าความคิดเห็นและตรวจสอบสถานะลงใน CodeChecker |

ขั้นตอนที่ 1 : CodeChecker log เรียกใช้คำสั่ง build ที่กำหนดและบันทึกขั้นตอนการรวบรวมที่ดำเนินการ ขั้นตอนเหล่านี้เขียนไปยังไฟล์เอาต์พุต (ฐานข้อมูลการรวบรวม) ในรูปแบบ JSON
ขั้นตอนที่ 2 : CodeChecker analyze ใช้ฐานข้อมูลการรวบรวม JSON ที่สร้างขึ้นก่อนหน้านี้เพื่อทำการวิเคราะห์ในโครงการผลลัพธ์การวิเคราะห์ผลลัพธ์ในรูปแบบเครื่องอ่านเครื่องจักร (plist)
ขั้นตอนที่ 3 : ในขั้นตอนนี้คุณสามารถทำหลายสิ่งได้หลายอย่าง:
แยกวิเคราะห์และพิมพ์บทสรุปและผลลัพธ์จากไฟล์ผลลัพธ์การวิเคราะห์ ( CodeChecker parse )
จัดเก็บผลลัพธ์ไปยังเซิร์ฟเวอร์ CodeChecker ที่กำลังทำงานอยู่ ( CodeChecker store )
เปรียบเทียบผลการวิเคราะห์สองรายการ/รันเพื่อแสดงผลลัพธ์ที่แตกต่างกันระหว่างสอง ( CodeChecker cmd diff )
เป็นต้น
สำหรับข้อมูลเพิ่มเติมวิธีใช้ CodeChecker ดูคู่มือผู้ใช้ของเรา
เริ่มต้นใช้งาน (วิธีการด้วยตัวอย่าง)
คู่มือผู้ใช้เครื่องวิเคราะห์
การหลีกเลี่ยงหรือระงับข้อดีเท็จ
การกำหนดค่า Checker และ Static Analyzer
ความเข้ากันไม่ได้ของ GCC
ระงับข้อดีที่ผิดพลาด
คู่มือผู้ใช้เว็บเซิร์ฟเวอร์
คู่มือผู้ใช้ Web GUI
บรรทัดคำสั่งและภาพรวมคุณลักษณะคุณสมบัติของ Web UI
การกำหนดค่าความปลอดภัย
การกำหนดค่าการรับรองความถูกต้อง
การกำหนดค่าการอนุญาต
การปรับใช้
ปรับใช้เซิร์ฟเวอร์โดยใช้ Docker
การกำหนดค่าเซิร์ฟเวอร์
การกำหนดค่าการบันทึกเซิร์ฟเวอร์
การตั้งค่าที่เก็บ codeChecker หลายตัวในเซิร์ฟเวอร์เดียว
การรวมอย่างต่อเนื่อง (CI)
CodeChecker เป็นการกระทำของ GitHub
การตั้งค่า ci gating กับ Gerrit และ Jenkins
การกำหนดค่าฐานข้อมูล
คู่มือการตั้งค่าฐานข้อมูล PostgreSQL
คู่มือการอัพเกรดเซิร์ฟเวอร์ CodeChecker และฐานข้อมูล
CodeChecker สามารถใช้เป็นเครื่องมือทั่วไปสำหรับการแสดงผลการวิเคราะห์ผลลัพธ์
สนับสนุนเครื่องมือต่อไปนี้:
| ภาษา | เครื่องวิเคราะห์ |
|---|---|
| C/C ++ | เครื่องวิเคราะห์แบบคงที่ |
| เสียงดัง | |
| คนฆ่าเชื้อ | |
| CPPCHECK | |
| Facebook อนุมาน | |
| coccinelle | |
| smatch | |
| เคอร์เนลดอล | |
| เบาบาง | |
| CPPLINT | |
| C# | roslynator.dotnet.cli |
| ชวา | สปอตบั๊ก |
| Facebook อนุมาน | |
| งูหลาม | ไพลินต์ |
| เพลา | |
| จาวาสคริปต์ | eslint |
| ตัวพิมพ์ใหญ่ | Tslint |
| ไป | Golint |
| การทำเครื่องหมาย | Markdownlint |
| สฟิงซ์ |
สำหรับรายละเอียดดูเอกสารการวิเคราะห์รหัสที่รองรับและเครื่องมือแปลงรายงาน
เครื่องมือที่มีประโยชน์ที่สามารถใช้นอก CodeChecker ได้
สร้าง Logger (เพื่อสร้างฐานข้อมูลการรวบรวม JSON จากงานสร้างของคุณ)
PLIST/SARIF เป็น HTML Converter (เพื่อสร้างไฟล์ HTML จากไฟล์ PLIST หรือ SARIF ที่กำหนด)
รายงานเครื่องมือแปลงรายงาน (เพื่อแปลงผลการวิเคราะห์จากเครื่องวิเคราะห์อื่น ๆ เป็นรูปแบบไดเรกทอรีรายงาน CodeChecker))))
ตัวรวบรวมหน่วยแปล (เพื่อรวบรวมไฟล์ต้นฉบับของหน่วยแปลหรือเพื่อรับไฟล์ต้นฉบับซึ่งขึ้นอยู่กับไฟล์ส่วนหัวที่กำหนด)
รายงาน Hash Generator (เพื่อสร้างตัวระบุแฮชที่ไม่ซ้ำกันสำหรับรายงาน)
สคริปต์ผู้ช่วยสำหรับการวิเคราะห์รายวัน
pipCodeChecker มีอยู่ใน PYPI และสามารถติดตั้งได้ด้วยคำสั่งต่อไปนี้:
PIP3 ติดตั้ง codeChecker
หมายเหตุ: แพ็คเกจนี้สามารถติดตั้งบนระบบ Linux , OSX และ Windows ที่มีคำสั่ง pip3 บน OSX จะต้องติดตั้ง intercept-build สำหรับการบันทึก ( CodeChecker log ) บน Windows ไม่มีการบันทึก
snap Package ManagerCodeChecker มีอยู่ใน Snap Store และสามารถติดตั้งได้ด้วยคำสั่งต่อไปนี้:
Sudo Snap ติดตั้ง CodeChecker -Classic
หมายเหตุ: น่าเสียดายที่แพ็คเกจ SNAP รองรับชื่อคำสั่งกรณีล่างเท่านั้น ด้วยเหตุนี้คุณต้องใช้คำสั่ง codechecker แทน CodeChecker ทุกที่ สำหรับรายการคำสั่งที่มีอยู่ทั้งหมดในแพ็คเกจ Snap CodeChecker ให้เรียกใช้ snap info codechecker
สำหรับรายการการพึ่งพารายละเอียดและสำหรับคำแนะนำเกี่ยวกับวิธีการติดตั้งรุ่นใหม่และรุ่น Clang Tidy โปรดดูข้อกำหนด คำสั่งต่อไปนี้ใช้เพื่อ bootstrap codeChecker บน Ubuntu 20.04 LTS:
# ติดตั้งการพึ่งพาบังคับสำหรับสภาพแวดล้อมการพัฒนาและการวิเคราะห์# หมายเหตุ: เสียงดังหรือเสียงดังสามารถเป็นรุ่นที่สดใหม่พอสมควรและไม่จำเป็นต้อง# มาจากแพ็คเกจผู้จัดการ!# ในกรณีของ CPPCHECK รุ่นที่รองรับน้อยที่สุดคือ 1.80# ในกรณีของ GCC cppcheck cppcheck g ++ build-essential curl
gcc-multilib git python3-dev python3-venv python3-setuptools# ในกรณีของเป้าหมาย venv_dev และ Ubuntu 23 Linux, ติดตั้งไลบรารีเพิ่มเติม: sudo apt-get ติดตั้ง libpq-dev# ติดตั้ง nodejs สำหรับเว็บ ในกรณีของ Debian/Ubuntu คุณสามารถใช้# คำสั่งต่อไปนี้ สำหรับข้อมูลเพิ่มเติมดูเอกสารอย่างเป็นทางการ:# https://nodejs.org/en/download/package-manager/curl -sl https://deb.nodesource.com/setup_16.x | sudo -e bash -
sudo apt -get Install -y nodejs# ลองดูรหัสแหล่งที่มา codechecker โคลน https://github.com/ericsson/codechecker.git ---depth 1 ~/codeCheckerCd ~/codeChecker# สร้าง python virtualenv และตั้งค่าเป็นสภาพแวดล้อมของคุณ `venv`.make venvsource $ pwd/venv/bin/activate# [ไม่บังคับ] หากคุณต้องการใช้วิธีการตรวจสอบภายนอก (LDAP/PAM)# ทำตามคำแนะนำใน# เอกสาร/เว็บ/การรับรองความถูกต้อง path = "$ pwd/build/codechecker/bin: $ path" cd ..หมายเหตุ :
โดยค่าเริ่มต้น make package จะสร้างวัตถุที่แชร์ LDLogger สำหรับ 32bit และ 64bit ด้วย หากคุณต้องการสร้างและแพ็คเกจ 64 bit only วัตถุที่แชร์และ LDLogger ไบนารีคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม BUILD_LOGGER_64_BIT_ONLY เป็น YES ก่อนที่แพ็คเกจบิลด์: BUILD_LOGGER_64_BIT_ONLY=YES make package
โดยค่าเริ่มต้น make package จะสร้างรหัส UI หากยังไม่ได้สร้างหรือเปลี่ยนรหัส UI หากคุณไม่ต้องการสร้างรหัส UI คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม BUILD_UI_DIST เป็น NO ก่อนที่จะสร้างแพ็คเกจ: BUILD_UI_DIST=NO make package
ใช้ make standalone_package แทนที่จะ make package เพื่อหลีกเลี่ยงการเปิดใช้งานสภาพแวดล้อมด้วยตนเองก่อนที่จะเรียกใช้ codeChecker
หากคุณได้อัพเกรด Python ของระบบเป็นเวอร์ชันใหม่กว่า (เช่นจาก 3.8 เป็น 3.11 นี่เป็นกรณีเมื่ออัปเกรด Ubuntu จาก 20.04 LTS เป็น 22.04 LTS) สภาพแวดล้อมที่ติดตั้งจะไม่ทำงานนอกกรอบ ในการแก้ไขปัญหานี้ให้เรียกใช้คำสั่งต่อไปนี้เพื่ออัปเกรด checker_env ของคุณด้วย:
cd ~/codechecker/venv Python3 -m Venv
สำหรับคำแนะนำในการติดตั้งสำหรับ Mac OS X ดูเอกสารประกอบการติดตั้ง Mac OS X
ในการเรียกใช้เซิร์ฟเวอร์ CodeChecker ใน Docker โปรดดูเอกสารประกอบ Docker คุณสามารถค้นหาคอนเทนเนอร์เว็บเซิร์ฟเวอร์ CodeChecker ได้ที่ Docker Hub
คุณสามารถติดตั้งและใช้ส่วนขยาย CodeChecker VSCODE จาก Visual Studio Marketplace หรือจาก Open VSX
คุณสมบัติหลัก:
เรียกใช้การวิเคราะห์ CodeChecker จากตัวแก้ไขและดูผลลัพธ์โดยอัตโนมัติ
วิเคราะห์ไฟล์ปัจจุบันอีกครั้งเมื่อบันทึก
คำสั่งและสร้างงานสำหรับการรัน codeChecker เป็นส่วนหนึ่งของระบบบิลด์
เรียกดูรายงานที่ค้นพบและแสดงขั้นตอนการทำซ้ำโดยตรงในรหัส
นำทางระหว่างขั้นตอนการทำซ้ำ

สำหรับข้อมูลเพิ่มเติมวิธีการติดตั้งและใช้ปลั๊กอินนี้ดูที่เก็บของส่วนขยายนี้

CodeChecker สามารถดำเนินการผ่านการดำเนินการ GitHub ที่นำกลับมาใช้ใหม่ได้สำหรับโครงการของคุณ! คุณต้องระบุคำสั่ง build เท่านั้นราวกับว่าคุณจะเรียกใช้การวิเคราะห์ในพื้นที่
สำหรับข้อมูลเพิ่มเติมตรวจสอบการวิเคราะห์การวิเคราะห์แบบคงที่ CodeChecker ในตลาดการกระทำของ GitHub
ขั้นตอนเหล่านี้จะต้องดำเนินการในพรอมต์คำสั่งใหม่ที่คุณต้องการดำเนินการวิเคราะห์
แหล่งที่มา ~/codeChecker/venv/bin/active# path ของ codeChecker แพ็คเกจ# หมายเหตุ: ข้ามบรรทัดนี้หากคุณต้องการระบุเส้นทางเต็มของ CodeChecker เส้นทางการส่งออก = ~/codeChecker/build/codeChecker/bin: $ path# เส้นทางของเส้นทาง LLVM/CLANG# NOTE: SKIP เส้นทาง>/build/bin: $ path
วิเคราะห์โครงการของคุณด้วยคำสั่ง check :
CodeChecker check -b "cd ~/your-project && make clean && make" -o ./results
check จะพิมพ์ภาพรวมของปัญหาที่พบในโครงการของคุณโดยเครื่องวิเคราะห์ รายงานจะถูกเก็บไว้ในไดเรกทอรี ./results ในรูปแบบ plist XML
คุณสามารถเห็นภาพผลลัพธ์เป็น HTML แบบคงที่โดยการดำเนินการ
CodeChecker parse -e html ./results -o ./reports_html
หน้าดัชนีจะถูกสร้างขึ้นด้วยรายการ repors ทั้งหมดใน ./reports_html/index.html
หากคุณมีผลลัพธ์หลายร้อยรายการคุณอาจต้องการจัดเก็บไว้บนเว็บเซิร์ฟเวอร์ด้วยแบ็กเอนด์ฐานข้อมูล
เริ่มต้น CodeChecker Web and Storage Server ในเทอร์มินัลอื่นหรือเป็นกระบวนการพื้นหลัง โดยค่าเริ่มต้นมันจะฟังบน localhost:8001
ฐานข้อมูล SQLite ที่มีรายงานจะถูกวางไว้ในไดเรกทอรีพื้นที่ทำงานของคุณ ( ~/.codechecker โดยค่าเริ่มต้น) ซึ่งสามารถให้ได้ผ่านการตั้งค่าสถานะ -w
CodeChecker server
จัดเก็บรายงานการวิเคราะห์ของคุณลงบนเซิร์ฟเวอร์เพื่อให้สามารถใช้เว็บดู
CodeChecker store ./results -n my-project
เปิดโปรแกรมดูเว็บ CodeChecker ในเบราว์เซอร์ของคุณและคุณควรได้รับการต้อนรับด้วยเว็บแอปพลิเคชันที่แสดงผลการวิเคราะห์
สถาปัตยกรรม
เค้าโครงแพ็คเกจ
การพึ่งพาอาศัยกัน
อินเตอร์เฟสเจริญเติบโตอย่างรวดเร็ว
การทดสอบแพ็คเกจและการรวม
ภาพรวมเกี่ยวกับโครงสร้างพื้นฐาน CodeChecker ได้รับที่ PLDI 2020
Márton, Gáborและ Krupp, Dániel :
Tool Talk: CodeChecker
ภาพรวมระดับสูงเกี่ยวกับโครงสร้างพื้นฐานมีให้บริการในงานนำเสนอการประชุม LLVM ยูโรยูโร 2015
Krupp, DánielและOrbán, GyörgyและHorváth, Gáborและ Babati, Bence :
ประสบการณ์ทางอุตสาหกรรมกับชุดเครื่องมือวิเคราะห์แบบคงที่