เพียวริฟายพลัส
| ยูนิคอม เพอร์ริฟายพลัส | |
|---|---|
| ผู้เขียนต้นฉบับ | ซอฟต์แวร์บริสุทธิ์ |
| นักพัฒนา | UNICOM Systems ซึ่งเป็นแผนกหนึ่งของUNICOM Global |
| เวอร์ชันเสถียร | 8.2 / 20 กันยายน 2024 |
| ระบบปฏิบัติการ | วินโดวส์, ลินุกซ์, โซลาริส |
| พิมพ์ | ตัวดีบักหน่วยความจำ |
| ใบอนุญาต | ซอฟต์แวร์กรรมสิทธิ์ |
| เว็บไซต์ | www.teamblue.unicomsi.com/products/purifyplus/ |
PurifyPlusเป็น โปรแกรม ดีบักหน่วยความจำ ที่นักพัฒนา ซอฟต์แวร์ใช้เพื่อตรวจจับข้อผิดพลาดในการเข้าถึงหน่วยความจำในโปรแกรม โดยเฉพาะโปรแกรมที่เขียนด้วยภาษา CหรือC++เดิมทีเขียนโดยReed HastingsจากPure Software [ 1 ] ต่อ มา Pure Software ได้ควบรวมกิจการกับ Atria Software เพื่อก่อตั้ง Pure Atria Software ซึ่งต่อมาถูกซื้อกิจการโดยRational Softwareซึ่งต่อมาถูกซื้อกิจการโดยIBMและต่อมาถูกขายให้กับUNICOM Systems , Inc. ในวันที่ 31 ธันวาคม 2014 โปรแกรมนี้ทำงานคล้ายกับดีบักหน่วยความจำอื่นๆ เช่นInsure++ , Valgrindและ BoundsChecker
ภาพรวม
PurifyPlus อนุญาตให้ทำการตรวจสอบแบบไดนามิก ซึ่งเป็นกระบวนการที่โปรแกรมค้นหาข้อผิดพลาดที่เกิดขึ้นขณะที่โปรแกรมทำงาน คล้ายกับดีบักเกอร์ ในทางตรงกันข้าม การตรวจสอบแบบคงที่หรือการวิเคราะห์โค้ดแบบคงที่ เกี่ยวข้องกับการตรวจจับข้อผิดพลาดในซอร์สโค้ดโดยไม่ต้องคอมไพล์หรือรัน เพียงแค่ค้นหาความไม่สอดคล้องกันทางตรรกะการตรวจสอบประเภทโดยคอมไพเลอร์ภาษาC เป็นตัวอย่างของการตรวจสอบแบบคงที่
เมื่อโปรแกรมถูกเชื่อมโยงกับ PurifyPlus รหัสตรวจสอบที่แก้ไขแล้วจะถูกแทรกเข้าไปในไฟล์ปฏิบัติการโดยอัตโนมัติ โดยการแยกวิเคราะห์และเพิ่มเข้าไปในโค้ดออบเจ็กต์รวมถึงไลบรารีต่างๆ ด้วยวิธีนี้ หากเกิดข้อผิดพลาดเกี่ยวกับหน่วยความจำ โปรแกรมจะพิมพ์ตำแหน่งที่เกิดข้อผิดพลาด ที่อยู่หน่วยความจำที่เกี่ยวข้อง และข้อมูลอื่นๆ ที่เกี่ยวข้องออกมา PurifyPlus ยังตรวจจับการรั่วไหลของหน่วยความจำได้อีกด้วย โดยค่าเริ่มต้น รายงานการรั่วไหลจะถูกสร้างขึ้นเมื่อโปรแกรมสิ้นสุดการทำงาน แต่ก็สามารถสร้างได้โดยการเรียกใช้ API การตรวจจับการรั่วไหลของ PurifyPlus จากภายในแอปพลิเคชันที่มีการติดตั้งเครื่องมือตรวจสอบ
ข้อผิดพลาดที่ PurifyPlus ตรวจพบ ได้แก่ การอ่านและการเขียนขอบเขตของอาร์เรย์ การพยายามเข้าถึงหน่วยความจำที่ไม่ได้จัดสรร การปล่อยหน่วยความจำที่ไม่ได้จัดสรร (โดยปกติเกิดจากการปล่อยหน่วยความจำเดียวกันเป็นครั้งที่สอง) รวมถึงการรั่วไหลของหน่วยความจำ (หน่วยความจำที่จัดสรรแล้วแต่ไม่มีตัวชี้อ้างอิง) ข้อผิดพลาดส่วนใหญ่เหล่านี้ไม่ร้ายแรง (อย่างน้อยก็ไม่ใช่ ณ จุดที่เกิดข้อผิดพลาด) และบ่อยครั้งเมื่อรันโปรแกรมโดยไม่มีวิธีใดที่จะตรวจพบได้ นอกจากการสังเกตว่ามีบางอย่างผิดปกติเนื่องจากพฤติกรรมของโปรแกรมที่ไม่ถูกต้อง ดังนั้น PurifyPlus จึงช่วยตรวจจับข้อผิดพลาดเหล่านี้และบอกโปรแกรมเมอร์ว่าข้อผิดพลาดเกิดขึ้นที่ใดอย่างแม่นยำ เนื่องจาก PurifyPlus ทำงานโดยการตรวจสอบโค้ดออบเจ็กต์ ทั้งหมด จึงตรวจพบข้อผิดพลาดที่เกิดขึ้นภายในไลบรารีของบุคคลที่สามหรือระบบปฏิบัติการข้อผิดพลาดเหล่านี้มักเกิดจากโปรแกรมเมอร์ส่งอาร์กิวเมนต์ที่ไม่ถูกต้องไปยังการเรียกใช้ไลบรารี หรือเกิดจากความเข้าใจผิดเกี่ยวกับโปรโตคอลสำหรับการปล่อยโครงสร้างข้อมูลที่ใช้โดยไลบรารี ข้อผิดพลาดเหล่านี้มักเป็นข้อผิดพลาดที่ยากที่สุดที่จะค้นหาและแก้ไข
ความแตกต่างจากดีบักเกอร์แบบดั้งเดิม
ความสามารถในการตรวจจับข้อผิดพลาดที่ไม่ร้ายแรงเป็นความแตกต่างที่สำคัญระหว่าง PurifyPlus กับโปรแกรมที่คล้ายกันจากดีบักเกอร์ ทั่วไป ในทางตรงกันข้าม ดีบักเกอร์โดยทั่วไปจะช่วยให้โปรแกรมเมอร์ค้นหาต้นตอของข้อผิดพลาดร้ายแรงได้อย่างรวดเร็ว เช่น โปรแกรมหยุดทำงานเนื่องจากการเข้าถึงค่าว่าง (null pointer ) แต่จะไม่ช่วยตรวจจับข้อผิดพลาดด้านหน่วยความจำที่ไม่ร้ายแรง ดีบักเกอร์มีประโยชน์สำหรับสิ่งอื่นๆ ที่ PurifyPlus ไม่ได้ออกแบบมาเพื่อทำ เช่น การตรวจสอบโค้ดทีละบรรทัด หรือการตรวจสอบหน่วยความจำของโปรแกรมด้วยตนเอง ณ ช่วงเวลาใดเวลาหนึ่งของการทำงาน กล่าวอีกนัยหนึ่ง เครื่องมือเหล่านี้สามารถเสริมซึ่งกันและกันได้สำหรับนักพัฒนาที่มีทักษะ
นอกจากนี้ PurifyPlus ยังมีฟังก์ชันอื่นๆ เช่นwatchpoint ประสิทธิภาพสูง ซึ่งมีประโยชน์โดยทั่วไปขณะใช้ดีบักเกอร์กับโค้ด
การใช้ PurifyPlus จะเหมาะสมที่สุดในภาษาโปรแกรมที่ปล่อยให้โปรแกรมเมอร์จัดการหน่วยความจำเอง เช่น ในภาษา Java , LispหรือVisual Basicการจัดการหน่วยความจำอัตโนมัติจะช่วยลดโอกาสการรั่วไหลของหน่วยความจำอย่างไรก็ตาม ภาษาเหล่านี้ก็ยังอาจเกิดการรั่วไหลได้ การอ้างอิงถึงอ็อบเจ็กต์ที่ไม่จำเป็นจะทำให้หน่วยความจำไม่สามารถจัดสรรใหม่ได้ IBM มีผลิตภัณฑ์ชื่อ Rational Application Developer ที่ช่วยตรวจจับข้อผิดพลาดประเภทนี้
แพลตฟอร์มที่รองรับ
แพลตฟอร์ม C/C++ ที่รองรับ
| ระบบปฏิบัติการ | สถาปัตยกรรมโปรเซสเซอร์ | เวอร์ชันระบบปฏิบัติการ | คอมไพเลอร์ |
|---|---|---|---|
| โซลาริส | |||
| ซัน อัลตร้าสปาร์ค | Solaris 11เวอร์ชันพื้นฐานถึง 11.4 Solaris 10เวอร์ชันพื้นฐานถึง U11 | Sun C/C++เวอร์ชัน 5.10 ถึง 5.15 | |
| AMD64 Intel 64 | Solaris 11เวอร์ชันพื้นฐานถึง 11.4 Solaris 10 U6 ถึง U11 | Sun C/C++เวอร์ชัน 5.10 ถึง 5.15 | |
| ลินุกซ์ | |||
| อินเทล ไอเอ-32 | RHEL 9 (เซิร์ฟเวอร์/เดสก์ท็อป) เวอร์ชันพื้นฐานถึง 9.4 RHEL 8 (เซิร์ฟเวอร์/เดสก์ท็อป) เวอร์ชันพื้นฐานถึง 8.9 RHEL 7 (เซิร์ฟเวอร์/เดสก์ท็อป) เวอร์ชันพื้นฐานถึง 7.9 SLES 15เวอร์ชันพื้นฐานถึง 15.5 SLES 12เวอร์ชันพื้นฐานถึง 12.5 | GNU gcc/g++ เวอร์ชัน 4 ถึง 11 | |
| AMD64 Intel 64 | RHEL 9 (เซิร์ฟเวอร์/เดสก์ท็อป) เวอร์ชันพื้นฐานถึง 9.4 RHEL 8 (เซิร์ฟเวอร์/เดสก์ท็อป) เวอร์ชันพื้นฐานถึง 8.9 RHEL 7 (เซิร์ฟเวอร์/เดสก์ท็อป) เวอร์ชันพื้นฐานถึง 7.9 SLES 15เวอร์ชันพื้นฐานถึง 15.5 SLES 12เวอร์ชันพื้นฐานถึง 12.5 | GNU gcc/g++ เวอร์ชัน 4 ถึง 11 | |
| วินโดวส์ | |||
| อินเทล IA-32 อินเทล 64 เอดีเอ็ม 64 | Microsoft Windows 10รุ่นพื้นฐานจนถึง 21H1 Microsoft Windows Server 2019รุ่น Standard และ Data Center Microsoft Windows Server 2016รุ่น Standard และ Data Center Microsoft Windows Server 2012รุ่น Foundation, Essential, Standard และ Data Center | Microsoft Visual Studio เวอร์ชัน 2010 ถึง 2022 |
แพลตฟอร์ม Java/.NET ที่รองรับ
| แพลตฟอร์ม | ประเภทการรวบรวมข้อมูล | สภาพแวดล้อมรันไทม์ |
|---|---|---|
| วินโดวส์ | ||
| การรวบรวมข้อมูลด้วย ภาษา C/C++ (โค้ดที่ไม่ได้รับการจัดการ) | Microsoft Visual Studio เวอร์ชัน 2010 ถึง 2022 | |
| การรวบรวมข้อมูลความครอบคลุมของโค้ดJava | IBM JRE เวอร์ชัน 5 ถึง 8 SUN JREเวอร์ชัน 1.5 ถึง 1.8 | |
| การรวบรวมข้อมูล .NET (โค้ดที่จัดการได้) | .NET Framework เวอร์ชัน 3.0 ถึง 4.5 ใช้งานร่วมกับMicrosoft Visual Studio เวอร์ชัน 2010 ถึง 2022 |
ดูเพิ่มเติม
ลิงก์ภายนอก
- "การสำรวจระบบสำหรับการตรวจจับข้อผิดพลาดขณะทำงานแบบอนุกรม" โดยกลุ่มคอมพิวเตอร์ประสิทธิภาพสูงของมหาวิทยาลัยไอโอวา สเตท