คุณลักษณะและแนวทางปฏิบัติในการดีบัก IDE ที่สามารถปรับปรุงกระบวนการดีบักของคุณได้
การดีบักเป็นหนึ่งในสิ่งที่สำคัญที่สุดในกระบวนการพัฒนา ไม่เพียงเพราะการแก้ไขจุดบกพร่องต้องใช้เวลาเกือบตลอดเวลา การดีบักยังมีประโยชน์มากในระหว่างการสร้างตรรกะทางธุรกิจ การเขียนอัลกอริธึม และการทดสอบโค้ด
เริ่มต้นด้วยพื้นฐาน เบรกพอยต์มี 4 ประเภทใน IntelliJ IDEA
จุดพักบรรทัด
หยุดแอปพลิเคชันเมื่อถึงบรรทัดโค้ดที่เพิ่มไว้ เบรกพอยต์ประเภทนี้สามารถเพิ่มได้เฉพาะในบรรทัดโค้ดที่ปฏิบัติการได้เท่านั้น หากบรรทัดมีนิพจน์ lambda คุณสามารถเลือกได้ว่าต้องการตั้งค่าจุดพักบรรทัดปกติหรือไม่ หรือควรหยุดโปรแกรมเฉพาะเมื่อมีการเรียกใช้ lambda เท่านั้น
เบรกพอยต์ของเมธอด
หยุดแอปพลิเคชันเมื่อเข้าหรือออกจากวิธีการที่ระบุหรือการใช้งานอย่างใดอย่างหนึ่ง ช่วยให้คุณสามารถตรวจสอบเงื่อนไขการเข้า/ออกของวิธีการได้ เบรกพอยต์ประเภทนี้อาจทำให้กระบวนการแก้ไขจุดบกพร่องช้าลงอย่างมาก ดังนั้นควรระมัดระวังและใช้เมื่อคุณต้องการเท่านั้น
เบรกพอยต์ข้อยกเว้น
หยุดแอปพลิเคชันเมื่อ Throwable.class
หรือคลาสย่อยถูกส่งออกไป
จุดเฝ้าระวังภาคสนาม
หยุดแอปพลิเคชันเมื่อมีการอ่านหรือเขียนฟิลด์ที่ระบุ สิ่งนี้ช่วยให้คุณตอบสนองต่อการโต้ตอบกับตัวแปรอินสแตนซ์เฉพาะได้ ตัวอย่างเช่น ลองดูว่าคุณสมบัติถูกเตรียมใช้งานอย่างไร หรือวิธีใดที่เปลี่ยนค่าของมัน
หากต้องการสร้างเบรกพอยต์ให้ใช้ทางลัด Ctrl + F8 ขึ้นอยู่กับตำแหน่งที่คุณทำเช่นนี้ จุดพักที่แตกต่างกันจะถูกสร้างขึ้น (บรรทัด วิธีการ หรือฟิลด์)
หากต้องการดูรายการเบรกพอยต์ทั้งหมด ให้ใช้ Ctrl + Shift + F8
คุณลักษณะนี้สามารถช่วยคุณประหยัดเวลาได้ ขอบคุณตัวเลือกนี้ คุณไม่จำเป็นต้องค้นหาเบรกพอยต์ของคุณและลบเบรกพอยต์ออกด้วยตนเอง หากเบรกพอยต์หยุดการเรียกใช้โค้ดเมื่อคุณไม่ต้องการ นอกจากนี้ยังช่วยให้คุณปิดการใช้งานเบรกพอยต์ได้อีกด้วย เบรกพอยต์ที่ปิดใช้งานจะไม่หยุดโค้ดของคุณในระหว่างการดีบัก แต่เมื่อคุณต้องการ คุณสามารถเปิดใช้งานอีกครั้งได้อย่างง่ายดาย ดังนั้นคุณจึงไม่จำเป็นต้องจำตำแหน่งสำคัญทั้งหมดในโปรเจ็กต์ และทุกครั้งที่สร้างและลบเบรกพอยต์
นอกจากนี้ ในหน้าต่างนี้ คุณสามารถกำหนดค่าเบรกพอยต์ทั้งหมดของคุณได้:
ระงับ
กำหนดว่าจะหยุดการทำงานของแอปพลิเคชันเมื่อถึงจุดพักหรือไม่ มีสองค่าที่เป็นไปได้ทั้งหมด/เธรด หากเลือก ทั้งหมด เธรดทั้งหมดจะถูกระงับเมื่อเธรดใด ๆ ถึงจุดพัก หากเป็น เธรด เฉพาะเธรดที่กระทบจุดพักเท่านั้นที่ถูกระงับ
เงื่อนไข
ตัวเลือกนี้ช่วยให้คุณสามารถระบุเงื่อนไขที่จะตรวจสอบทุกครั้งที่ถึงจุดพัก หากเงื่อนไขส่งคืนค่า true การดำเนินการที่ระบุจะถูกดำเนินการ ถ้าไม่เช่นนั้น เบรกพอยต์จะถูกข้ามไป
ตามเงื่อนไข คุณสามารถใช้:
- คำสั่งหลายรายการ รวมถึงการประกาศ ลูป คลาสที่ไม่ระบุชื่อ และอื่นๆ
this
(เฉพาะในบริบทที่ไม่คงที่) เช่น!(this instanceof User)
- ตรวจสอบค่าบูลีนหรือนิพจน์
ตัวเลือกการบันทึก
เมื่อถึงจุดพักแล้ว สิ่งต่อไปนี้สามารถบันทึกลงในคอนโซลได้:
- ข้อความ “ถึงจุดพัก”: ข้อความบันทึกถึงเรา
Breakpoint reached at package.User.main(User.java:10)
- การติดตามสแต็ก: การติดตามสแต็กสำหรับเฟรมปัจจุบัน สิ่งนี้มีประโยชน์ถ้าคุณต้องการตรวจสอบว่ามีการเรียกใช้เมธอดใดก่อนที่จะถึงจุดพัก
- ประเมินและบันทึก: ผลลัพธ์ของนิพจน์ที่กำหนดเอง เช่น
"Creating..."
หรือusers.size()
ลบออกเมื่อโดน
กำหนดว่าควรลบเบรกพอยต์ออกจากโครงการหลังจากถึงจุดนั้นแล้วครั้งหนึ่งหรือไม่
ปิดการใช้งานจนกว่าจะถึงจุดพักต่อไปนี้
ปิดใช้งานเบรกพอยต์ปัจจุบันจนกว่าจะถึงเบรกพอยต์ที่ระบุ
คุณยังสามารถเลือกได้ว่าควรปิดใช้งานเบรกพอยต์หลังจากสิ่งนี้เกิดขึ้นหรือไม่
ตัวกรอง
JetBrains IDE ช่วยให้คุณสามารถกำหนดค่าการดำเนินการเบรกพอยต์โดยการกรองคลาส/อินสแตนซ์/เมธอดออก และหยุดแอปพลิเคชันเฉพาะเมื่อจำเป็นเท่านั้น
มีตัวกรองประเภทต่อไปนี้:
- ตัวกรองคลาสการตรวจจับ: หยุดแอปพลิเคชันเมื่อตรวจพบข้อยกเว้นในคลาสที่ระบุ
- ตัวกรองอินสแตนซ์: จำกัดการดำเนินการเบรกพอยต์ไว้ที่อินสแตนซ์ออบเจ็กต์ที่ระบุ
- ตัวกรองคลาส: จำกัดการดำเนินการเบรกพอยต์ไว้ที่คลาสที่ระบุ
- ตัวกรองผู้โทร: จำกัดการทำงานของเบรกพอยต์โดยขึ้นอยู่กับผู้เรียกของวิธีการปัจจุบัน เลือกตัวเลือกนี้ถ้าคุณต้องการหยุดที่จุดพักเฉพาะเมื่อมีการเรียกเมธอดจากเมธอดที่ระบุ
การเข้าถึง/แก้ไขข้อมูลภาคสนาม
- การเข้าถึงฟิลด์:เลือกตัวเลือกนี้เพื่อให้จุดเฝ้าระวังทำงานเมื่อมีการอ่านฟิลด์
- การแก้ไขฟิลด์:เลือกเพื่อให้จุดเฝ้าระวังทำงานเมื่อมีการเขียนฟิลด์ถึง
จำนวนผ่าน
กำหนดว่าเบรกพอยต์ควรทำงานหลังจากถึงจำนวนครั้งที่ระบุแล้วเท่านั้น สะดวกสำหรับการดีบักลูปหรือวิธีการเรียกซ้ำ
ข้อยกเว้นที่ตรวจพบ/ไม่ถูกตรวจจับ
- ข้อยกเว้นที่ตรวจพบ:เลือกเพื่อให้เบรกพอยต์ทำงานเมื่อตรวจพบข้อยกเว้นที่ระบุ
- ข้อยกเว้นที่ไม่ได้รับการตรวจสอบ:เลือกเพื่อให้เบรกพอยต์ทำงานเมื่อตรวจไม่พบข้อยกเว้นที่ระบุ วิธีนี้ช่วยให้คุณทราบสาเหตุของข้อยกเว้นที่ไม่สามารถจัดการได้
แนวทางปฏิบัติที่ดีที่สุดของเบรกพอยต์
ใช้เบรกพอยต์เพื่อบันทึกการดีบัก ห้ามใช้ System.out.println
ใช้เบรกพอยต์การบันทึกแทนการเพิ่ม System.out.print
ในโค้ดของคุณ นี่เป็นวิธีที่ยืดหยุ่นมากขึ้นสำหรับการบันทึกแอปพลิเคชันของคุณ และป้องกันไม่ให้คุณจากโค้ดที่สกปรกและการเปลี่ยนแปลงโค้ดโดยไม่ตั้งใจในคอมมิตคอมไพล์
ใช้ทางลัดเพื่อเพิ่มเบรกพอยท์ ซึ่งจะช่วยประหยัดเวลาได้มาก
การใช้ทางลัดเป็นมุมมองที่ดีสำหรับการพัฒนาที่มีประสิทธิผลมากขึ้น อย่าลืมเกี่ยวกับพวกเขา
จัดระเบียบเบรกพอยต์ของกลุ่ม
คุณสามารถสร้างกลุ่มของเบรกพอยท์ได้ ตัวอย่างเช่น หากคุณต้องการทำเครื่องหมายเบรกพอยท์สำหรับปัญหาเฉพาะ ในกล่องโต้ตอบ เบรกพอยท์ (Ctrl+Shift+F8) ให้เลือกเบรกพอยท์ที่คุณต้องการเพิ่มลงในกลุ่ม และเลือก ย้ายไปยังกลุ่ม
ค้นหาสาเหตุของข้อผิดพลาดร้ายแรง
เบรกพอยต์ข้อยกเว้นใช้ได้กับ Throwable.class
คุณสามารถเพิ่มเงื่อนไขที่จะช่วยให้คุณหยุดการเรียกใช้โค้ดเฉพาะเมื่อมีการโยน Error.class
เท่านั้น หรือคุณสามารถจำกัดให้แคบลงเหลือ MyCustomException.class
ก็ได้
อย่าใช้เมธอดเบรกพอยต์เมื่อไม่จำเป็น
จุดพักของเมธอดอาจทำให้การรันโค้ดของคุณช้าลงอย่างมาก ซึ่งอาจขโมยเวลาของคุณได้มากมาย
อย่าลบเบรกพอยต์ออกทั้งหมด
หากคุณไม่ต้องการเบรกพอยต์เฉพาะในขณะนี้ อย่าลบเบรกพอยต์ออกทั้งหมด คุณก็สามารถปิดการใช้งานได้ มันอาจจะประหยัดเวลาได้มากในอนาคต เมื่อคุณต้องทดสอบบล็อกโค้ดเดียวกัน คุณไม่จำเป็นต้องค้นหามันในโปรเจ็กต์ขนาดใหญ่ คุณสามารถเปิดใช้งานเบรกพอยต์เดิมได้อีกครั้ง
เพิ่มคำอธิบายให้กับเบรกพอยต์
มันสามารถช่วยให้คุณเข้าใจว่าทำไมคุณถึงต้องการเบรกพอยต์นี้ในเบรกพอยต์จำนวนมาก
ก้าวผ่านโปรแกรม
การก้าว เป็นการดำเนินโปรแกรมทีละขั้นตอน
เมื่อการรันโค้ดหยุดบนเบรกพอยต์ของคุณ คุณสามารถเลื่อนผ่านโค้ดด้วยขั้นตอนประเภทต่างๆ คุณสามารถดูแผงขั้นตอนด้านบนได้
มาดูรายละเอียดแต่ละขั้นตอนกันดีกว่า
ก้าวข้าม(F8)
ก้าวข้ามบรรทัดโค้ดปัจจุบันและนำคุณไปยังบรรทัดถัดไป การดำเนินการตามวิธีการจะถูกข้ามไป และคุณย้ายไปยังบรรทัดถัดไปของวิธีการปัจจุบัน
ก้าวเข้าสู่(F7)
ขั้นตอนภายในวิธีการแสดงโค้ดภายใน ตัวเลือกนี้จะสะดวกเมื่อคุณไม่แน่ใจว่าวิธีการส่งกลับค่าที่ถูกต้อง
ก้าวออก(Shift + F8)
ออกจากวิธีปัจจุบันและนำคุณไปยังวิธีผู้โทร
วิ่งไปที่เคอร์เซอร์ (Alt + F9)
ดำเนินการแอปพลิเคชันต่อไปยังตำแหน่งเคอร์เซอร์ปัจจุบัน
บังคับก้าวข้าม (Shift+Alt+F8)
ก้าวข้ามบรรทัดโค้ดปัจจุบันและนำคุณไปยังบรรทัดถัดไป หากมีจุดพักในวิธีการที่เรียกว่า ก็จะถูกละเว้น
ดรอปเฟรม
ช่วยให้คุณสามารถเลิกทำเฟรมสุดท้ายและกู้คืนเฟรมก่อนหน้าในสแต็ก วิธีนี้จะสะดวก เช่น หากคุณก้าวไปไกลเกินไปโดยไม่ได้ตั้งใจ หรือต้องการเข้าสู่ฟังก์ชันที่คุณข้ามบล็อกโค้ดที่สำคัญ
โปรแกรมดำเนินการต่อ(Ctrl + F9)
ดำเนินการแอปพลิเคชันของคุณต่อไปยังเบรกพอยต์ถัดไป
หน้าต่างเครื่องมือแก้ไขข้อบกพร่อง
เมื่อคุณเริ่มกระบวนการแก้ไขจุดบกพร่อง หน้าต่างเครื่องมือ แก้ไขจุดบกพร่อง จะปรากฏขึ้น หน้าต่างนี้ใช้สำหรับควบคุมเซสชันการแก้ไขข้อบกพร่อง การแสดงและการวิเคราะห์ข้อมูลโปรแกรม และการดำเนินการแก้ไขข้อบกพร่องต่างๆ
ในหน้าต่างนี้ คุณสามารถดูออบเจ็กต์ คุณสมบัติ ข้อยกเว้น ค่า ฯลฯ ที่สร้างขึ้นได้ จะสะดวกเมื่อคุณต้องการให้แน่ใจว่าคุณสมบัติทั้งหมดเริ่มต้นอย่างถูกต้อง วิธีพารามิเตอร์ที่ได้รับ หรือดูที่สแต็กข้อยกเว้น ติดตาม.
ทำตามขั้นตอนแนวทางปฏิบัติที่ดีที่สุดของโปรแกรม
ใช้ Step Into แม้กับวิธีการจากไลบรารีภายนอก
บางครั้งไลบรารีภายนอกอาจมีข้อบกพร่องเช่นกัน การดีบักไลบรารีภายนอกสามารถช่วยให้คุณค้นหาโค้ดที่ไม่ถูกต้องและรายงานไปยังผู้พัฒนาไลบรารีนี้ได้ หรือปัญหาอาจอยู่ในสิ่งอื่น ตัวอย่างเช่น หากเมธอดจากไลบรารีภายนอกส่งคืนค่าที่ไม่คาดคิด ให้เข้าไปที่เมธอดนั้นเพื่อหาสาเหตุของพฤติกรรมนี้ อาจเป็นเพราะเมธอดเท่ากับ/แฮชโค้ด/ฯลฯ ของอ็อบเจ็กต์ไม่ถูกต้อง หรือบางทีบางคลาสของไลบรารีนี้อาจเป็น แทนที่ในโครงการของคุณ
ใช้ แสดงจุดดำเนินการ
หากคุณสูญเสียจุดที่การเรียกใช้โค้ดของคุณหยุดลง ให้ใช้แสดงจุดดำเนินการ (Alt + F10)เพื่อย้ายไปยังจุดพักที่ถึง
ลองดูที่สแต็คของการโทร
บางครั้งสาเหตุของพฤติกรรมที่ไม่คาดคิดอาจมาจากจุดที่คุณไม่มีจุดพัก ลองดูที่สแต็กของการเรียกเพื่อดูว่ามีการดำเนินการวิธีการใดบ้าง มันสามารถช่วยให้คุณค้นหาอันที่ไม่ถูกต้องได้ นอกจากนี้ หากคุณนำทางไปยังวิธีอื่นผ่านการเรียกแบบสแต็ก คุณจะสามารถดูพารามิเตอร์ที่วิธีนี้ได้รับก่อนหน้านี้
การประเมินการแสดงออก
นอกจากนี้ IntelliJ IDEA ยังช่วยให้คุณประเมินนิพจน์บนเบรกพอยต์ได้ เป็นวิธีที่สะดวกมากในการดูว่าวิธีการนั้นทำงานอย่างไรกับค่าอื่นๆ
ในการประเมินนิพจน์ ให้ใช้ปุ่ม Alt + F8 หรือ ประเมิน
การประเมินแนวทางปฏิบัติที่ดีที่สุด
ประเมินทุกอย่าง
หากคุณต้องการทดสอบวิธีการของคุณด้วยค่าที่แตกต่างกัน อย่าสร้างออบเจ็กต์ด้วยตนเองและรีสตาร์ทแอปพลิเคชัน คุณสามารถประเมินวิธีการด้วยค่าเหล่านี้ได้ ซึ่งจะช่วยประหยัดเวลาได้มาก และคุณจะเห็นคุณสมบัติทั้งหมดของ วัตถุที่ส่งคืน
ผู้ประเมินสามารถดำเนินการได้ทุกอย่าง
IntelliJ IDEA ช่วยให้คุณสามารถประเมินไม่เพียงแต่วิธีการในเครื่องของคุณเท่านั้น แต่ยังรวมถึงวิธีการภายนอกที่แตกต่างกันหรือ java.*
อีกด้วย ผู้ประเมินยังสามารถดำเนินการวิธีการที่ส่งคำขอไปยังบริการอื่นได้ ดังนั้นคุณจึงสามารถดูการตอบกลับโดยละเอียดได้
ระวังสตรีมด้วย
หากคุณอ่านสตรีมของคุณครั้งหนึ่งในตัวประเมิน สตรีมจะถือว่าอ่านแล้ว ดังนั้นอาจทำให้เกิดข้อผิดพลาดหากแอปพลิเคชันของคุณพยายามอ่านอีกครั้ง
บางครั้งการ Debbunging ก็เป็นกระบวนการที่น่ารำคาญและยืดเยื้อ แต่เป็นสิ่งที่ขาดไม่ได้สำหรับนักพัฒนาทุกคน และ IntelliJ IDEA มอบคุณสมบัติและตัวเลือกที่ทำให้สะดวกสบาย ง่าย และมีประสิทธิภาพยิ่งขึ้น เราอาจชอบหรือไม่แก้ไขจุดบกพร่องก็ได้ แต่นี่คือสิ่งที่ต้องใช้เวลาส่วนใหญ่ในการพัฒนา
และท้ายที่สุดแล้ว การปฏิบัติที่สำคัญที่สุด
ลืมปุ่ม Run ไปได้เลย ใช้เฉพาะ Debug หากคุณเป็นนักพัฒนาซอฟต์แวร์ 😀