สวัสดีทุกคน ชุมชน JavaRush วันนี้เราจะพูดถึงการดีบัก: คืออะไร และจะดีบักใน Intellij IDEA ได้อย่างไร
บทความนี้มีไว้สำหรับผู้ที่มีความรู้เกี่ยวกับ Java Core เพียงเล็กน้อยอยู่แล้ว จะไม่มีกรอบงานหรือกระบวนการที่ซับซ้อนสำหรับการเผยแพร่ไลบรารี เดินง่าย. ดังนั้นทำตัวให้สบายแล้วเริ่มกันเลย!
แต่จะทำอย่างไร? แน่นอน คุณสามารถตั้งค่าได้
การแก้ไขข้อบกพร่องเป็นกระบวนการของการดีบัก (ตรวจสอบ) โค้ด เมื่อในระหว่างการดำเนินการ คุณสามารถหยุดที่สถานที่ที่กำหนดและดูความคืบหน้าของการดำเนินการได้ เข้าใจสถานะของโปรแกรมในบางจุด มันเหมือนกับว่าคุณสามารถหยุดชีวิตและมองทุกสิ่งจากภายนอกได้ เจ๋งใช่มั้ย? เป้าหมายของเราคือการเรียนรู้วิธีดีบักแอปพลิเคชันอย่างรวดเร็วและง่ายดายโดยใช้ Intellij IDEA สภาพแวดล้อมการพัฒนาที่เราชื่นชอบ
เลือก โปรเจ็กต์ การนำเสนอการแก้ไขข้อ บกพร่อง คลิกตกลงและรับ:
ออกจากโปรเจ็กต์การนำเข้าจากแหล่งภายนอก Mavenแล้วคลิกเสร็จสิ้น หลังจากนำเข้าโครงการแล้ว เราสามารถอธิบายกระบวนการโดยใช้ตัวอย่างสดได้
ที่จะทำให้เบรกพอยต์ทั้งหมดไม่ทำงาน หากต้องการดูว่าเบรกพอยท์ใดถูกตั้งค่าไว้แล้ว คุณสามารถไปที่ Debug ที่มุมล่างซ้ายแล้วค้นหาไอคอน
หรือกดCtrl+Shift+F8 :
เมื่อเราไปที่รายการเบรกพอยท์ เราจะเห็น:
มีจุดสั่งล่วงหน้าสองจุด ที่นี่:
ในหน้าต่างที่ปรากฏขึ้น ให้เขียนชื่อของข้อยกเว้นที่ต้องเพิ่ม เลือกจากรายการที่เสนอแล้วคลิกตกลง :
เราเสร็จสิ้นโปรแกรมการศึกษานี้และเดินหน้าต่อไป
เนื่องจากฉันเป็นคนเลี้ยงผึ้งตามกรรมพันธุ์ สำหรับการนำเสนอการแก้ไขจุดบกพร่อง ฉันจึงสร้างโครงการที่อธิบายกระบวนการเก็บน้ำหวานด้วยผึ้ง การแปรรูปน้ำหวานให้เป็นน้ำผึ้ง และการได้น้ำผึ้งจากรัง จากเอกสารประกอบของไฟล์ README ซึ่งอยู่ในรากของโครงการ เราได้อ่าน: พฤติกรรมที่คาดหวัง - จากดอกไม้ทั้งหมดที่ใช้เก็บน้ำหวาน (เป็น ค่า สองเท่า ) ปริมาณน้ำผึ้งจะถูกรวบรวมเท่ากับครึ่งหนึ่งของ น้ำหวานที่รวบรวมไว้ โครงการมีชั้นเรียนดังต่อไปนี้:
คุณต้องดูว่ามีอะไรผิดปกติที่นั่น จากการติดตามสแต็กที่มุมขวาล่าง เราจะเห็นว่าใน
นี่เป็นกรณีของเราอย่างแน่นอน: มี RuntimeException มาเพิ่มการค้นหาข้อยกเว้นดังกล่าวดังที่อธิบายไว้ข้างต้น และเรียกใช้
และเราจะรับโปรแกรมที่หยุดทำงานในขณะนี้ก่อนที่จะเรียกใช้ข้อยกเว้นด้วยไอคอนนี้ ![แก้ไขจุดบกพร่องใน Intellij IDEA: คำแนะนำสำหรับผู้เริ่มต้น - 20]()
. หากต้องการรับข้อมูลที่ครบถ้วนคุณต้องดูในส่วนแก้ไขข้อบกพร่อง มันมีVariablesซึ่งแสดงตัวแปรทั้งหมดที่มีอยู่ในส่วนนี้ของแอปพลิเคชัน:
แอปพลิเคชันทำงานและให้คำตอบ: “น้ำผึ้ง 33.0 ผลิตโดยผึ้ง 7 ตัวจากต้นน้ำผึ้ง 2 ต้น” ทุกอย่างจะดี แต่คำตอบคือ ผิด... ทั้งหมดเป็นเพราะในเอกสารประกอบไฟล์ README มีเขียนไว้ว่าน้ำหวานกลายเป็นน้ำผึ้งในอัตราส่วน 2 ต่อ 1:
มาดูจุดนี้กันดีกว่า โปรแกรมหยุดก่อนที่จะดำเนินการบรรทัดที่ 28 ที่ด้านล่างสุดเราจะเห็นส่วน Debug ซึ่งอธิบายข้อมูลทั้งหมดในแอปพลิเคชันที่ทำงานอยู่ ส่วนของตัวแปร ดังที่กล่าวไปแล้ว ประกอบด้วยตัวแปรและออบเจ็กต์ทั้งหมดที่สามารถเข้าถึงได้จากส่วนนี้ของแอปพลิเคชัน ส่วนเฟรมจะแสดงขั้นตอนที่แอปพลิเคชันดำเนินการ คุณสามารถดูขั้นตอนก่อนหน้าและรับข้อมูลในเครื่องทั้งหมดได้ เพื่อให้โปรแกรมทำงานต่อไปคุณสามารถกดF9หรือไอคอนสีเขียวดังที่แสดงด้านล่าง:
หากต้องการหยุดโปรแกรมคุณต้องคลิกที่สี่เหลี่ยมสีแดง:
หากต้องการรีสตาร์ทแอปพลิเคชันในโหมดแก้ไขข้อบกพร่องคุณต้องคลิกที่ลูกศร:
ถัดไป หากต้องการดูแอปพลิเคชันทีละขั้นตอน คุณสามารถใช้สองปุ่ม:
ต่อไปเราจะเข้าสู่โหมดแก้ไขข้อบกพร่องโดยใช้F8 โดยใช้ วิธีนี้จนจบและอธิบายสิ่งที่เกิดขึ้นในวิธีนี้:
เอกสารประกอบในไฟล์ README มีข้อผิดพลาดและจะต้องได้รับการอัปเดต มาอัปเดตไฟล์ README กัน:
hub ต่อไปได้อย่างใจเย็นด้วยรูปลักษณ์ที่ชาญฉลาด :)
ทำไมคุณถึงต้องการการดีบัก?
มาทำให้ชัดเจนทันที: ไม่มีโค้ดใดที่ไม่มีข้อบกพร่อง... ชีวิตทำงานอย่างนี้แหละ ดังนั้นเราจึงไม่ควรกลายเป็นคนเดินกะโผลกกะเผลกทันทีและยอมแพ้ทุกอย่างหากโค้ดไม่ทำงานอย่างที่เราคาดหวังSystem.out.println
ทุกที่ที่ทำได้ จากนั้นเรียงลำดับเอาต์พุตในเทอร์มินัลโดยหวังว่าคุณจะพบข้อผิดพลาด ถึงกระนั้น ก็เป็นไปได้... และพวกเขาทำได้ และพวกเขาทำอย่างระมัดระวังโดยใช้การบันทึก (คุณสามารถอ่านรายละเอียดได้ ที่นี่ ) แต่ถ้าเป็นไปได้ที่จะรันโค้ดบนเครื่องท้องถิ่น ควรใช้Debugจะ ดีกว่า ฉันอยากจะทราบทันทีว่าในบทความนี้ เราจะพิจารณาการดีบักโปรเจ็กต์ภายใน Intellij IDEA หากคุณสนใจอ่านเกี่ยวกับการดีบักแบบระยะไกล นี่คือบทความ จากแหล่งข้อมูลของเรา
ดีบั๊กคืออะไร

สิ่งที่คุณต้องมีเพื่อเริ่มการดีบัก
ฉันให้คำแนะนำฟรี: ในขณะที่คุณกำลังอ่านบทความ ให้ทำทุกอย่างที่จะอธิบายไว้ที่นี่ โชคดีที่มีทุกอย่างสำหรับเรื่องนี้ อะไรที่คุณต้องการ:- สภาพแวดล้อมการพัฒนา Intellij IDEA เวอร์ชัน 2019.3.1 และสูงกว่า เผื่อใครไม่มี มีลิงค์ให้โหลดครับ ดาวน์โหลด Community Edition เพราะนั่นคือสิ่งที่ฉันจะใช้
- โคลนโปรเจ็กต์จาก GitHubและนำเข้าผ่าน IDEA


ทฤษฎีเล็กๆ น้อยๆ...ผมสัญญา :D
ในการเริ่มแก้ไขจุดบกพร่องเล็กน้อย คุณต้องเข้าใจว่าจุดพัก คืออะไร และทำความเข้าใจปุ่มลัดสองสามปุ่มที่คุณต้องใช้ในการเริ่มต้น เบรกพอยต์เป็นเครื่องหมายพิเศษที่แสดงตำแหน่งหรือสถานะที่ควรหยุดแอปพลิเคชัน คุณตั้งค่าเบรกพอยต์ได้ด้วยการคลิกซ้ายที่แถบด้านข้าง ซ้ายหรือคลิกตำแหน่งโค้ดแล้วกดCtrl + F8 เบรกพอยต์มีสามประเภท: เครื่องหมายเส้น เครื่องหมายตัวแปร และเครื่องหมายวิธีการ ดูเหมือนว่านี้:-
ต่อบรรทัด:
หากมีแลมบ์ดาในนิพจน์ IDEA จะเสนอทางเลือกให้คุณ - ใส่นิพจน์บนทั้งบรรทัดหรือเฉพาะเจาะจงในแลมบ์ดา:
-
ต่อวิธี:
-
ต่อชั้นเรียน




- Bee.java:24 - ในคลาส Bee ออนไลน์ 24
- Main.java:14 - ในคลาส Main ที่บรรทัด 14


ไปกันเถอะ บุกเข้าไปในป่าของการดีบักกันเถอะ

- Bee - ผึ้งงานธรรมดา
- BeeQueen - ราชินีผึ้ง;
- รังผึ้ง - รังผึ้ง;
- HoneyPlant - พืชน้ำผึ้งที่เก็บน้ำผึ้ง
- หลัก - ตำแหน่งที่
public static void main()
วิธีการที่โครงการเริ่มต้นตั้งอยู่
main()
ปรากฎว่าไม่เพียงแต่ไม่นับปริมาณน้ำผึ้งเท่านั้น แต่ยังเกิดข้อผิดพลาดด้วย... 
HoneyPlant.java:20
RuntimeException ถูกส่งออกไป: 
main()
เมธอดใน โหมดแก้ไขข้อบกพร่อง ในการดำเนินการนี้ให้คลิกที่ลูกศรสามเหลี่ยมสีเขียวใน Intellij IDEA ก่อนวิธีการmain()
: 


- น้ำหวาน = 1.0;
- น้ำหวานความจุ = -1.0.
if ( nectar == 0 ) {
return 0;
}
แต่สิ่งที่จับได้คือมันกำลังตรวจสอบตัวแปรที่ผิด... และนี่คือจุดบกพร่องในโค้ด แทนที่จะตรวจสอบค่าของน้ำหวานในดอกไม้ซึ่งอยู่ใน ตัวแปร NectarCapacityโปรแกรมจะตรวจสอบค่าของน้ำหวานที่เข้ามาในเมธอดและเป็นปริมาณที่ต้องการดึงจากน้ำหวาน นี่ไง แมลงตัวแรก! ดังนั้นเราจึงใส่มันให้ถูกต้องและรับนิพจน์:
if ( nectarCapacity == 0) {
return 0;
}
ต่อไปเรารันmain()
วิธีการในโหมดปกติ(Run `Main.main()`)
และไม่มีข้อผิดพลาดอีกต่อไป โปรแกรมทำงาน: 
## Documentation
Presentation based on honey getting process.
**Note**: 1 honey point = 2 nectar points
จากวิธีการหลักจะเห็นได้ว่ามีต้นน้ำผึ้งอยู่ 2 ต้น คือ น้ำหวาน 30 และ 40 หน่วย ตามลำดับ ดังนั้นสุดท้ายแล้วจะได้น้ำผึ้ง 35 หน่วย และเขาเขียนว่า 33. อีกสองหน่วยหายไปไหน?... เรามารู้กัน! ในการทำเช่นนี้ เราจำเป็นต้องใส่เบรกพอยต์ในเมธอดMain.main()
บนบรรทัดที่ 28 ซึ่งจะถูกดำเนินการbeeHive.populateHoney()
และรันmain
เมธอดในโหมด Debug: 



- F8 - อ่านโค้ดบางส่วนและอย่าใช้วิธีภายใน
- F7 - ไปที่ส่วนของโค้ดแล้วป้อนวิธีการภายใน
beeHive.populateHoney()
เราต้องกด F7 แล้วเราจะไปต่อ: 
- บรรทัดที่ 25 - Stream API ใช้เพื่อรวบรวมน้ำผึ้งจากผึ้งทั้งหมด
- บรรทัดที่ 26 - น้ำผึ้งถูกเติมเข้าไปในบรรทัดที่มีอยู่
- บรรทัดที่ 27 - น้ำผึ้ง 2 หน่วยถูกจัดสรรให้กับราชินี
- บรรทัดที่ 28 - สองหน่วยนี้จะถูกลบออกจากจำนวนน้ำผึ้งทั้งหมด
- บรรทัดที่ 29 - มดลูกกินน้ำผึ้งนี้
## Documentation
Presentation based on honey getting process.
**Note**:
* 1 honey point = 2 nectar points
* 2 honey point queen bee eats every time when beehive populates the honey.
เพียงเท่านี้: ข้อบกพร่องทั้งหมดที่พบได้รับการแก้ไขแล้ว เราสามารถดื่มกาแฟต่อและอ่านบทความบน JavaRush สรุป
ในบทความนี้เราพบว่า:- ไม่มีงานใดที่ปราศจากข้อผิดพลาดและการดีบักเป็นวิธีที่ดีในการแก้ไข
- เบรกพอยต์คืออะไรและมีประเภทใดบ้าง
- วิธีการกำหนดค่าเบรกพอยต์ข้อยกเว้น
- วิธีนำทางในโหมดแก้ไขข้อบกพร่อง
บทความน่าอ่าน
- โครงการที่ใช้ในบทความ
- IntelliJ IDEA และ Debug: ไม่ใช่การดำน้ำ แต่เป็นการดำน้ำตื้น
- ความจริงอันขมขื่นเกี่ยวกับการเขียนโปรแกรม...
- เอกสารอย่างเป็นทางการ
- ประเภทของเบรกพอยต์ เอกสารอย่างเป็นทางการ
GO TO FULL VERSION