CodeGym /จาวาบล็อก /สุ่ม /การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น
John Squirrels
ระดับ
San Francisco

การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น

เผยแพร่ในกลุ่ม
สวัสดีทุกคนในชุมชน CodeGym! วันนี้เรามาพูดถึงการดีบักกัน — มันคืออะไรและจะดีบักใน IntelliJ IDEA ได้อย่างไร บทความนี้มีไว้สำหรับผู้ที่มีความรู้ขั้นต่ำของ Java Core แล้ว จะไม่มีเฟรมเวิร์กหรือขั้นตอนที่ซับซ้อนในการเผยแพร่ไลบรารี่ เดินเล่นสบายๆ ทำตัวให้สบายแล้วเริ่มกันเลย! การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 1

ทำไมคุณต้องใช้โหมด Debug

เรามาชี้แจงบางอย่างในทันที: ไม่มีรหัสใดที่ไม่มีข้อบกพร่อง... นี่เป็นเพียงวิธีการทำงานของชีวิต ดังนั้น เราไม่ควรแตกเป็นชิ้นเล็กชิ้นน้อยและยอมแพ้หากโค้ดของเราไม่ทำงานตามที่เราคาดไว้ แต่เราควรทำอย่างไร? เราสามารถใส่System.out.printlnคำสั่งทุกที่แล้วหวีผ่านคอนโซลเอาต์พุตโดยหวังว่าจะพบข้อผิดพลาด ที่กล่าวว่า คุณสามารถ (และคนอื่นทำ) ดีบักได้โดยใช้การบันทึกอย่างระมัดระวัง แต่ถ้าคุณสามารถรันโค้ดบนเครื่องโลคัลได้ ควรใช้โหมดดีบั๊ก จะดีกว่า ฉันต้องการทราบทันทีว่าในบทความนี้เราจะพิจารณาการดีบักโครงการโดยใช้ IntelliJ IDEA

โหมดดีบั๊กคืออะไร?

โหมดดีบั๊กมีไว้สำหรับดีบั๊ก (ตรวจสอบ) รันโค้ด ทำให้คุณสามารถหยุดการดำเนินการในสถานที่ที่กำหนดและดูว่าสิ่งต่างๆ ดำเนินไปอย่างไร ช่วยให้คุณเข้าใจสถานะของโปรแกรม ณ ตำแหน่งเฉพาะในโค้ด มันเหมือนกับสามารถหยุดนาฬิกาและมองทุกสิ่งจากด้านข้าง เย็นใช่มั้ย? วัตถุประสงค์ของเราคือการเรียนรู้วิธีการดีบักแอปพลิเคชันอย่างรวดเร็วและง่ายดายโดยใช้สภาพแวดล้อมการพัฒนา IntelliJ IDEA อันเป็นที่รักของเรา

สิ่งที่คุณต้องการเพื่อเริ่มการดีบัก

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

แค่ทฤษฏีนิดหน่อย...ผมสัญญา :D

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

    การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 4

    หากคำสั่งมีนิพจน์แลมบ์ดา IDEA จะแจ้งให้คุณเลือกว่าจะใส่เบรกพอยต์ในคำสั่งทั้งหมดหรือเฉพาะในนิพจน์แลมบ์ดา:

    การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 5
  • ในวิธีการ:

    การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 6
  • ในชั้นเรียน:

    การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 7
จุดพักสามารถลบออกได้โดยทำตามขั้นตอนเดียวกับที่ใช้เพิ่มจุดพัก มีบางสถานการณ์ที่คุณต้องการปิดการใช้งาน (ปิดเสียง) ในการดำเนินการนี้ ให้ค้นหา การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 8ไอคอนในส่วนการตรวจแก้จุดบกพร่อง การดำเนินการนี้จะปิดเสียงเบรกพอยต์ทั้งหมด หากต้องการดูว่าเบรกพอยต์ใดที่ตั้งค่าไว้ คุณสามารถไปที่ส่วนดีบักที่มุมล่างซ้ายและค้นหาไอคอน หรือ การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 9กดCtrl+Shift+F8 : การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 10เมื่อย้ายไปยังรายการเบรกพอยต์ เราจะเห็นสิ่งต่อไปนี้: การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 11เบรกพอยต์มีอยู่สองรายการ ที่นี่:
  • Bee.java:24 — ในคลาส Bee ที่บรรทัด 24
  • Main.java:14 — ในคลาสหลักในบรรทัดที่ 14
โปรดทราบว่าเบรกพอยต์เหล่านี้จะไม่ถูกตั้งค่าโดยอัตโนมัติหากคุณได้ลอกแบบโครงการ คุณจะต้องตั้งค่าเบรกพอยต์ด้วยตัวเอง! นอกจากนี้ยังมีส่วนเบรกพอยต์ข้อยกเว้นของ Java มันมีประโยชน์มาก ที่นี่คุณสามารถเพิ่มเบรกพอยต์โดยปริยายเพื่อให้โปรแกรมหยุดก่อนที่จะทิ้งข้อยกเว้นหรือข้อยกเว้นเฉพาะ เราจะเพิ่มจุดพักโดยปริยายสำหรับ RuntimeException นี่เป็นเรื่องง่ายที่จะทำ ค้นหาไอคอน "+" ที่มุมซ้ายบน คลิกที่มันแล้วเลือกJava Exception Breakpoints : การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 12ในหน้าต่างที่ปรากฏขึ้น ให้เขียนชื่อข้อยกเว้นที่คุณต้องการเพิ่ม เลือกจากรายการและคลิกOK : การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 13สรุปเบื้องต้นของเราเกี่ยวกับวิธีการตั้งค่า ดังนั้นตอนนี้เรา' จะไปฝึกบ้าง

มาทำสิ่งนี้ที่เรียกว่าการแก้จุดบกพร่องกันเถอะ!

ฉันมาจากตระกูลผู้เลี้ยงผึ้งหลายครอบครัว ดังนั้นโปรเจ็กต์ที่ฉันสร้างขึ้นเพื่อแสดงให้เห็นการแก้ไขจุดบกพร่องจึงอธิบายถึงแบบจำลองกระบวนการของผึ้งในการเก็บน้ำหวาน แปรรูปน้ำหวานเป็นน้ำผึ้ง แล้วจึงรับน้ำผึ้งจากรังผึ้ง ตามเอกสารไฟล์ README ซึ่งสามารถพบได้ในไดเร็กทอรีรากของโครงการ พฤติกรรมที่คาดหวังของดอกไม้ทั้งหมดที่เก็บน้ำหวานคือปริมาณน้ำผึ้งที่เก็บได้ (ซึ่งอยู่ในรูปของสองเท่า)เท่ากับครึ่งหนึ่งของ น้ำหวานที่รวบรวมได้ โครงการมีชั้นเรียนดังต่อไปนี้:
  • ผึ้ง — ผึ้งงานธรรมดา
  • BeeQueen — ราชินีผึ้ง
  • BeeHive — รังผึ้ง
  • HoneyPlant — พืชน้ำผึ้ง (แหล่งน้ำหวาน) ที่เก็บน้ำหวาน
  • หลัก — นี่คือที่ที่เราพบpublic static void main()วิธีการเริ่มต้นการดำเนินการ
หากเราเรียกใช้main()เมธอด เราพบว่าไม่เพียงแต่โปรแกรมของเราไม่คำนวณปริมาณน้ำผึ้งเท่านั้น แต่ยังมีข้อยกเว้น... การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 14เราจำเป็นต้องตรวจสอบและระบุว่าปัญหาคืออะไร จากสแต็กการติดตามที่มุมขวาล่าง เราจะเห็นว่าใน RuntimeException ถูกโยนไปที่HoneyPlant.java:20: การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 15นั่นเป็นเพียงสิ่งที่เราพูดถึงด้านบน ลองดู RuntimeException นี้โดยเรียกใช้main()เมธอดในโหมดดีบัก ในการทำเช่นนี้ ให้คลิกที่ลูกศรสามเหลี่ยมสีเขียวใน IntelliJ IDEA ถัดจากmain()วิธีการ การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 16ผลที่ตามมาคือ เราจะให้โปรแกรมหยุดทำงานทันทีก่อนที่ข้อยกเว้นจะเกิดขึ้น และเราจะเห็นไอคอนนี้: การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 17การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 18เพื่อให้ได้ข้อมูลทั้งหมดที่มีอยู่ เราต้องดูในส่วนการดีบัก มันมีตัวแปรบานหน้าต่างที่แสดงตัวแปรทั้งหมดที่มีในส่วนนี้ของแอปพลิเคชัน:
  • น้ำทิพย์ = 1.0;
  • น้ำหวานความจุ = -1.0.
การโยนข้อยกเว้นเป็นเรื่องสมเหตุสมผลเพราะพืชน้ำผึ้งไม่สามารถมีน้ำหวานในปริมาณที่เป็นลบได้ แต่ทำไมสิ่งนี้ถึงเกิดขึ้น? ท้ายที่สุดแล้ว ในบรรทัดที่ 15-17 เราตรวจสอบว่าน้ำหวานที่จ่ายไปหมดแล้วหรือไม่และคืนค่าศูนย์หากเป็น:

	if (nectar == 0) {
   	     return 0;
}
แต่ปัญหาคือเรากำลังตรวจสอบตัวแปรผิด นี่เป็นข้อผิดพลาดในรหัส แทนที่จะตรวจสอบปริมาณน้ำหวานที่มีอยู่ในดอกไม้ (ซึ่งเก็บอยู่ในตัวแปรDTACCapacity ) โปรแกรมจะตรวจสอบค่าของ พารามิเตอร์ น้ำหวาน ของเมธอด ซึ่งเป็นปริมาณน้ำหวานที่เราต้องการนำมาจากดอกไม้ นี่คือ! บั๊กแรกของเรา! หลังจากแก้ไขแล้ว เราจะได้รับรหัสต่อไปนี้:

	if (nectarCapacity == 0) {
   	     return 0;
}
ตอนนี้เรียกใช้main()วิธีการตาม(Run 'Main.main()')ปกติ ไม่มีข้อยกเว้น และโปรแกรมทำงาน: การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 19แอปพลิเคชันทำงานจนเสร็จสิ้นและให้คำตอบต่อไปนี้:

"33.0 honey was produced by 7 bees from 2 honey plants"
ตอนนี้ทุกอย่างน่าจะเรียบร้อยดี แต่คำตอบนี้ไม่ถูกต้อง... ตามเอกสารประกอบไฟล์ README น้ำหวานจะถูกแปลงเป็นน้ำผึ้งในอัตราส่วน 2 ต่อ 1:

## Documentation
Presentation based on honey production.

**Note**: 2 units of nectar = 1 unit of honey
วิธีหลักอย่างชัดเจนคือพืชน้ำผึ้งสองชนิดที่มีน้ำหวาน 30 และ 40 หน่วยตามลำดับ ในที่สุดเราควรจะลงเอยด้วยน้ำผึ้ง 35 หน่วย แต่โปรแกรมบอกเราว่าได้ 33 แล้วอีกสองหน่วยหายไปไหน? มาดูกัน! ในการทำเช่นนี้ ให้ตั้งค่าเบรกพอยต์ในMain.main()เมธอดที่บรรทัดที่ 28 ซึ่งbeeHive.populateHoney()ถูกเรียกและรันเมธอดmain()ในโหมดดีบัก: การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 20เราจะพิจารณาประเด็นนี้โดยละเอียดยิ่งขึ้น โปรแกรมหยุดทำงานก่อนที่จะดำเนินการบรรทัดที่ 28 ในส่วนล่าง เราจะเห็นส่วนการตรวจแก้จุดบกพร่อง ซึ่งแสดงข้อมูลที่มีอยู่ทั้งหมดเกี่ยวกับแอปพลิเคชันที่กำลังทำงานอยู่ ดังที่กล่าวไว้แล้ว บานหน้าต่างตัวแปรประกอบด้วยตัวแปรและวัตถุทั้งหมดที่มีจากส่วนนี้ของแอปพลิเคชัน บานหน้าต่างเฟรมแสดงขั้นตอนที่แอปพลิเคชันดำเนินการ — คุณสามารถดูขั้นตอนก่อนหน้า (เฟรม) และดูข้อมูลในเครื่องทั้งหมดได้ ในการรันโปรแกรมต่อ คุณสามารถกดF9หรือไอคอนสีเขียวตามที่แสดงด้านล่าง: การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 21หากต้องการหยุดโปรแกรม ให้คลิกที่สี่เหลี่ยมสีแดง: การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 22หากต้องการรีสตาร์ทแอปพลิเคชันในโหมดดีบัก ให้คลิกที่ลูกศร: การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 23นอกจากนี้ คุณสามารถดำเนินการต่อผ่าน แอปพลิเคชันทีละขั้นตอนโดยใช้สองปุ่ม:
  • F8 — ก้าวผ่านโค้ดโดยไม่ต้องเข้าสู่เมธอด
  • F7 — ก้าวผ่านโค้ดและเข้าสู่เมธอด
ในกรณีของเรา เราต้องกด F7 เพื่อเข้าสู่beeHive.populateHoney()วิธีการ เราได้รับ: การดีบักใน IntelliJ IDEA: คู่มือสำหรับผู้เริ่มต้น - 24ตอนนี้เราจะใช้F8เพื่อทำตามขั้นตอนนี้และอธิบายสิ่งที่เกิดขึ้น:
  • บรรทัดที่ 25 — Stream API ใช้เพื่อรวบรวมน้ำหวานจากผึ้งทั้งหมด
  • บรรทัดที่ 26 — น้ำผึ้งที่สร้างขึ้นใหม่จะถูกเพิ่มเข้าไปในน้ำผึ้งที่มีอยู่
  • บรรทัดที่ 27 — มีการจัดสรรน้ำผึ้ง 2 หน่วยสำหรับราชินี
  • บรรทัดที่ 28 — สองหน่วยนี้ถูกลบออกจากจำนวนน้ำผึ้งทั้งหมด
  • บรรทัดที่ 29 — ราชินีกินน้ำผึ้งนี้
นั่นคือที่มาของสองหน่วยที่หายไป! เย่! หลังจากพูดคุยกับนักวิเคราะห์ธุรกิจแล้ว เราสรุปได้ว่า ไฟล์ เอกสาร README มีข้อผิดพลาดและจำเป็นต้องอัปเดต มาอัพเดทไฟล์ README:

## Documentation
Presentation based on honey production.

**Note**:
* 2 units of nectar = 1 unit of honey
* The queen bee eats 2 units of honey every time when beehive is replenished with honey.
เสร็จแล้ว เราได้แก้ไขข้อบกพร่องทั้งหมดที่เราพบแล้ว เราสามารถทำหน้าตาบูดบึ้ง จิบกาแฟ และอ่านบทความเกี่ยวกับStack Overflow CodeGym ได้อย่างใจเย็น :)

มาสรุปกัน

ในบทความนี้ เราได้เรียนรู้:
  • งานของทุกคนมีข้อผิดพลาดและการดีบักเป็นวิธีที่ยอดเยี่ยมในการแก้ไข
  • จุดพักคืออะไรและมีจุดพักประเภทใดบ้าง
  • วิธีตั้งค่าเบรกพอยต์ข้อยกเว้น
  • ขั้นตอนผ่านรหัสในโหมดดีบัก

บทความน่าอ่าน

ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION