ในฐานะนักพัฒนาจำเป็นต้องมีทักษะการดีบักในการพัฒนาในสภาพแวดล้อมการพัฒนา เมื่อเขียนโปรแกรม Java เรามักจะพบปัญหาที่อธิบายไม่ได้หลายประการ ในการตรวจสอบว่าโปรแกรมเป็นปัญหาที่ไหนเรามักจะต้องเพิ่มบันทึกเพื่อดูค่าของตัวแปรดังนั้นการดีบักจึงลำบากมาก สมมติว่าฉันใช้เวลา 1 ชั่วโมงต่อวันดีบักแอปพลิเคชันของฉันมันจะใช้เวลานานถ้ามันสะสม ด้วยเหตุผลนี้ใช้เวลานี้เพื่อให้คุณค่าและเข้าใจคุณสมบัติทั้งหมดที่ทำให้เราดีบักดีขึ้น ที่สามารถช่วยคุณประหยัดเวลาและจะทำให้ชีวิตของคุณสะดวกสบายและผ่อนคลายมากขึ้น
1. มุมมองดีบัก
หน้าต่างที่ใช้กันมากที่สุดในการดีบักคือ:
| หน้าต่าง | อธิบาย |
|---|---|
| หน้าต่างดีบัก | ส่วนใหญ่จะแสดงสแต็กวิธีการเรียกเธรดปัจจุบันรวมถึงจำนวนบรรทัดของรหัส (รหัสที่มีข้อมูลการดีบัก) |
| หน้าต่างเบรกพอยต์ | => หน้าต่างรายการเบรกพอยต์ซึ่งสามารถอำนวยความสะดวกในการเพิ่มจุดพัก, การตั้งค่าเงื่อนไขเบรกพอยต์, การลบจุดพัก, ฯลฯ |
| หน้าต่างตัวแปร | => แสดงตัวแปรโลคัลของวิธีการปัจจุบันวิธีที่ไม่คงที่รวมถึงแอปพลิเคชันนี้สามารถแก้ไขและเปลี่ยนค่าของตัวแปร |
| หน้าต่างแก้ไขรหัส | => ไม่จำเป็นต้องพูดมากขึ้น |
| หน้าต่างคอนโซลเอาท์พุท | => บันทึกและเนื้อหาผลลัพธ์อื่น ๆ ในระหว่างการดีบักคุณสามารถตั้งค่าระดับส่วนประกอบของความสนใจให้ต่ำกว่าเล็กน้อยเพื่อให้ได้ข้อมูลเอาต์พุตหลายรายการ |
นอกจากนี้หน้าต่างเสริมคือ:
| หน้าต่าง | อธิบาย |
|---|---|
| หน้าต่างนิพจน์นิพจน์ | => เขียนนิพจน์ของข้อมูลที่คุณต้องสังเกตหรือแก้ไขค่าของมิเตอร์ |
| หน้าต่างแสดง | => สามารถเรียกใช้บล็อกโค้ดเนื้อหาเอาต์พุต ฯลฯ ได้ในการแสดงผล |
| โครงร่างหน้าต่างโครงร่าง | => ดูวิธีการตัวแปร ฯลฯ ของคลาสปัจจุบัน |
| พิมพ์หน้าต่างลำดับชั้น | => ตรวจสอบระดับการสืบทอดของคลาสปัจจุบันรวมถึงอินเทอร์เฟซการใช้งานและระดับการสืบทอดคลาส |
| วิธีการเรียกความสัมพันธ์กับหน้าต่างลำดับชั้น | => ตรวจสอบวิธีการที่เรียกว่าคลาสใดที่เรียกว่าและแถวใดเป็นวิธีที่สอดคล้องกันสามารถเปิดได้โดยตรง |
| หน้าต่างค้นหาผลการค้นหา | => การรวมปุ่มลัดคุณสามารถดูตำแหน่งรหัสที่อ้างอิงหรือกำหนดไว้ในพื้นที่ทำงานโครงการและชุดงาน |
1) มุมมองแบบเต็มของหน้าต่าง:
2) Debug View (มุมมองสแต็คเธรด):
มุมมองการดีบักช่วยให้คุณสามารถจัดการโปรแกรมที่มีการดีบักและทำงานบน Workbench มันแสดงเฟรมสแต็กของเธรดที่ถูกระงับไว้ในโปรแกรมที่คุณกำลังแก้ไขข้อบกพร่องและแต่ละเธรดในโปรแกรมจะปรากฏเป็นโหนดของต้นไม้ เขาแสดงกระบวนการสำหรับแต่ละเป้าหมายที่กำลังทำงานอยู่ หากเธรดถูกระงับเฟรมสแต็กของมันจะแสดงเป็นองค์ประกอบเด็ก นี่คือปุ่มแก้ไขข้อบกพร่องที่ใช้กันทั่วไป:
1. บ่งชี้ว่าการใช้งานปัจจุบันยังคงทำงานต่อไปจนถึงจุดพักถัดไปและคีย์ทางลัดคือ F8
2. หมายถึงการขัดจังหวะกระบวนการทั้งหมด
3. หมายถึงการป้อนวิธีปัจจุบันและคีย์ทางลัดคือ F5
4. หมายถึงการเรียกใช้รหัสบรรทัดถัดไปและปุ่มทางลัดคือ F6
5. หมายถึงการออกจากวิธีการปัจจุบันและกลับไปที่เลเยอร์การโทร คีย์ทางลัดคือ F7
6. แสดงสแต็กของเธรดปัจจุบันซึ่งคุณสามารถดูว่ารหัสใดกำลังทำงานอยู่และกระบวนการโทรทั้งหมดรวมถึงหมายเลขบรรทัดของรหัส
รายละเอียดบทนำ:
ข้ามจุดพักทั้งหมด: ตั้งจุดพักทั้งหมดให้ข้ามไป หลังจากตั้งค่าข้ามจุดพักทั้งหมดจะมีการเฉือนบนจุดพักทั้งหมดซึ่งบ่งชี้ว่าจุดพักจะถูกข้ามและเธรดจะไม่ถูกระงับที่จุดพัก
วางลงในเฟรม: คำสั่งนี้อนุญาตให้โปรแกรมกลับไปที่จุดเริ่มต้นของวิธีการปัจจุบันและเริ่มดำเนินการอีกครั้ง คุณสามารถ execute กรอบ Java Stack อีกครั้ง คุณสามารถเลือกเฟรมสแต็กที่ระบุจากนั้นคลิกวางลงเพื่อเฟรมเพื่อให้คุณสามารถป้อนเฟรมสแต็กที่ระบุอีกครั้ง ให้ความสนใจกับการใช้ Drop to Frame:
1. ไม่สามารถวางลงในวิธีการในสแต็กวิธีการที่ดำเนินการแล้ว
2. เมื่อวางลงในเฟรมสแต็กค่าดั้งเดิมของข้อมูลทั่วโลกจะไม่เปลี่ยนแปลง ตัวอย่างเช่น Verter ที่มีองค์ประกอบจะไม่ถูกล้าง
ตัวกรองขั้นตอน: ฟังก์ชั่นนี้ค่อนข้างง่าย เมื่อเราต้องการเพิกเฉยต่อคลาสที่เราไม่สนใจเมื่อทำการดีบักเราสามารถเปิดใช้งานตัวกรองขั้นตอนสำหรับการกรอง โปรแกรมจะดำเนินการต่อไปจนกว่าจะพบตำแหน่งหรือจุดพักที่ไม่มีการกรอง ฟังก์ชั่นตัวกรองขั้นตอนประกอบด้วยสี่รายการ: ใช้ตัวกรองขั้นตอน, แก้ไขตัวกรองขั้นตอน, ประเภทตัวกรองและแพ็คเกจตัวกรอง การดำเนินการเฉพาะมีดังนี้:
ขั้นตอนที่ 1: Windows -> การตั้งค่า -> java -> debug -> การกรองขั้นตอน
ขั้นตอนที่ 2: เลือก 'ใช้ตัวกรองขั้นตอน'
ขั้นตอนที่ 3: เลือกตัวเลือกที่ต้องการบนหน้าจอ คุณสามารถเพิ่มรหัสบางส่วนในฐานรหัสของคุณเอง
ขั้นตอนที่ 4: คลิก 'ใช้'
โดยหลักการแล้วคำสั่งแก้ไขขั้นตอนตัวกรองจะใช้เพื่อกำหนดค่ากฎตัวกรองขั้นตอนในขณะที่ประเภทตัวกรองและแพ็คเกจตัวกรองอ้างถึงประเภท Java ที่กรองและแพ็คเกจ Java ตามลำดับ
ขั้นตอนการกลับมา: เด้งออกจากวิธีปัจจุบัน ในระหว่างการดำเนินการของวิธีที่เรียกว่าการใช้การส่งคืนขั้นตอนจะกระโดดออกจากวิธีการและกลับไปที่วิธีที่เรียกวิธีการหลังจากดำเนินการรหัสทั้งหมดของวิธีปัจจุบัน
ขั้นตอนเหนือ: เมื่อดำเนินการขั้นตอนเดียวเมื่อพบฟังก์ชั่นย่อยในฟังก์ชั่นมันจะไม่เข้าสู่ฟังก์ชั่นย่อยเพื่อดำเนินการขั้นตอนเดียว แต่จะหยุดการดำเนินการทั้งหมดของฟังก์ชั่นย่อยนั่นคือฟังก์ชั่นย่อยทั้งหมดเป็นขั้นตอนเดียว
ก้าวเข้าสู่: ก้าวเข้าสู่: ก้าวเข้าไปป้อนและดำเนินการต่อเพื่อก้าวเข้ามาเมื่อพบกับฟังก์ชั่นย่อย
ประวัติย่อ: การกู้คืนเธรดหยุดชั่วคราวและกระโดดโดยตรงจากตำแหน่งปัจจุบันไปยังตำแหน่งเบรกพอยต์ถัดไป
ระงับ: หยุดเธรดที่เลือกชั่วคราวและคุณสามารถเรียกดูหรือแก้ไขรหัสตรวจสอบข้อมูล ฯลฯ
Eclipse รองรับการระงับเธรดและการกู้คืนผ่านการระงับและดำเนินการต่อ โดยทั่วไปแล้ว Suspend เหมาะสำหรับการดีบักโปรแกรมหลายเธรด เมื่อเราต้องการดูเฟรมสแต็กและค่าตัวแปรของเธรดที่แน่นอนเราสามารถระงับเธรดผ่านคำสั่ง Suspend เรซูเม่ใช้สำหรับการกู้คืน
มีประวัติย่อสองประเภทที่ต้องการความสนใจ:
สิ่งแรกคือการแก้ไขรหัสโปรแกรมในระหว่างกระบวนการดีบักบันทึกและคลิกต่อเรซูเม่และโปรแกรมจะถูกระงับชั่วคราวที่จุดพัก
ประการที่สองคือเมื่อโปรแกรมส่งข้อยกเว้นให้เรียกใช้เรซูเม่และโปรแกรมจะถูกระงับชั่วคราวที่จุดพัก
สิ้นสุด: Eclipse ยุติการดีบักของโปรแกรมท้องถิ่นผ่านคำสั่ง TEMINATE
Disconnect: Eclipse ใช้คำสั่ง disconnect เพื่อยุติการเชื่อมต่อซ็อกเก็ตไปยังระยะไกล JVM
1. การดีบักและดำเนินการ
| เครื่องหมาย | การทำงาน | คีย์ทางลัด | อธิบาย |
|---|---|---|---|
| 6.4 | ข้อมูลขั้นตอน | F5 | -> ก้าวเข้าสู่ (หากมีการเรียกใช้วิธีการจะป้อนวิธีการโทรสำหรับการดีบัก); |
| 6.4 | ก้าวข้าม | F6 | -> ข้ามทีละขั้นตอน (ในการเรียกวิธีการใด ๆ ที่ไม่ได้ป้อนบรรทัด, เรียกใช้งานบรรทัดปัจจุบันโดยตรงของรหัสและข้ามไปยังบรรทัดถัดไป); |
| 6.4 | ผลตอบแทนขั้นตอน | F7 | -> ส่งคืนในขั้นตอนเดียว (เรียกใช้วิธีปัจจุบันวางวิธีการปัจจุบันจากสแต็กการโทรและกลับไปที่ตำแหน่งการโทรที่มีการเรียกวิธีการปัจจุบัน); |
| 6.5 | ประวัติย่อ | F8 | -> ดำเนินการต่อการดำเนินการปกติ (จนกว่าจะพบจุดพักครั้งต่อไป); |
| 7.4 | วิ่งไปที่บรรทัด | Ctrl+R | -> ดำเนินการกับบรรทัดปัจจุบัน (จุดพักทั้งหมดที่อยู่ตรงกลางจะถูกละเว้นและดำเนินการไปยังบรรทัดที่ตั้งเคอร์เซอร์ปัจจุบัน); |
| 6.3 | วางลงในเฟรม | ไม่มี | -> ถอยกลับไปที่จุดเริ่มต้นของวิธีการที่ระบุฟังก์ชั่นนี้ค่อนข้างดี คลิกขวาวิธีการในการเรียกใช้สแต็กวิธีการแล้วเลือกวางลงเพื่อเฟรมเพื่อดำเนินการจากจุดเริ่มต้นของวิธีการตัวอย่างเช่นการเรียกใช้วิธีนี้อีกครั้ง คุณสามารถใช้ drop เพื่อเฟรมบนวิธีนี้เพื่อ execute อีกครั้งจากบรรทัดแรกของวิธีนี้ แน่นอนสำหรับวิธีการที่มีผลข้างเคียงเช่นการดำเนินการฐานข้อมูลการเปลี่ยนเนื้อหาวัตถุของพารามิเตอร์ที่ส่งผ่าน ฯลฯ อาจเป็นการเปิดเผยเนื้อหาของเนื้อหาที่คุณต้องการอีกครั้ง |
| 6.1+6.2 | สำเนาสแต็ก | ไม่มี | -> คัดลอกข้อมูลสแต็กเธรดปัจจุบัน |
หากคุณต้องการยกเว้นคลาสแพ็คเกจ ฯลฯ ในระหว่างการดีบักคุณสามารถใช้แก้ไขการตั้งค่าตัวกรองขั้นตอน
คุณสมบัติของ A6: ข้อมูลการเริ่มต้นกระบวนการ Java รวมถึงพารามิเตอร์การเริ่มต้นคอนโซลพารามิเตอร์สภาพแวดล้อม ฯลฯ หากมีปัญหาใด ๆ กับพารามิเตอร์การเริ่มต้นพารามิเตอร์คุณสามารถตรวจสอบได้ก่อนว่าพารามิเตอร์เริ่มต้นจริงที่นี่ไม่ถูกต้องหรือไม่ นอกจากนี้คุณยังสามารถดูตัวเลือกที่เกี่ยวข้องสำหรับเครื่องเสมือนเพื่อรองรับการดีบัก
2. การดูข้อมูล
| เครื่องหมาย | การทำงาน | คีย์ทางลัด | อธิบาย |
|---|---|---|---|
| 7.4 | ตรวจสอบ | ctrl+shift+i | -> ดูตัวแปรที่เลือกค่านิพจน์หรือผลการดำเนินการกด Ctrl+Shift+I อีกครั้งเพื่อเพิ่มนิพจน์หรือค่าปัจจุบันลงในหน้าต่างนิพจน์เพื่อดู; |
| 7.4 | แสดง | ctrl+shift+d | -> แสดงตัวแปรที่เลือกค่านิพจน์หรือผลการดำเนินการ กด Ctrl+Shift+D อีกครั้งเพื่อเพิ่มนิพจน์หรือค่าปัจจุบันลงในหน้าต่างแสดงผลเพื่อแสดง; |
| 7.4 | ประหารชีวิต | ctrl+u | -> เรียกใช้นิพจน์การเลือก; |
| 7.4 | วิ่งไปที่บรรทัด | Ctrl+R | -> ดำเนินการกับบรรทัดปัจจุบัน (จุดพักทั้งหมดที่อยู่ตรงกลางจะถูกละเว้นและดำเนินการไปยังบรรทัดที่ตั้งเคอร์เซอร์ปัจจุบัน); |
| 7.3 | ทุกกรณี | ctrl+shift+n | -> ดูวัตถุทั้งหมดของคลาสที่เลือกฟังก์ชั่นนี้ยอดเยี่ยม |
| 7.3 | จำนวนอินสแตนซ์ | ไม่มี | -> ดูจำนวนวัตถุทั้งหมดในคลาสที่เลือก |
| 7.4 | ดู | ไม่มี | -> เพิ่มตัวแปรปัจจุบันและนิพจน์ลงในหน้าต่างนิพจน์ |
3) มุมมองตัวแปร (มุมมองตัวแปร)
1. สำหรับมุมมองชื่อตัวแปรแสดงตัวแปรอินสแตนซ์ทั้งหมดและตัวแปรท้องถิ่นที่สามารถเข้าถึงได้ในบรรทัดรหัสปัจจุบัน
2. แสดงค่าตัวแปรทั้งหมด
3. ค่าตัวแปรสามารถเปลี่ยนแปลงได้ผ่านหน้าต่างนี้
มุมมองตัวแปรแสดงข้อมูลตัวแปรที่เกี่ยวข้องกับเฟรมสแต็กที่เลือกในมุมมองการดีบัก เมื่อทำการดีบักโปรแกรม Java ตัวแปรสามารถเลือกที่จะแสดงข้อมูลรายละเอียดเพิ่มเติมในบานหน้าต่างรายละเอียด นอกจากนี้วัตถุ Java ยังสามารถแสดงค่าของคุณสมบัติที่มี เลือกตัวแปรในหน้าต่างนี้และคลิกขวาเพื่อดำเนินการหลายอย่างการดำเนินการหลักมีดังนี้:
อินสแตนซ์ทั้งหมด: เปิดกล่องโต้ตอบเพื่อแสดงอินสแตนซ์ทั้งหมดของคลาส Java การใช้ฟังก์ชั่นนี้ต้องใช้เครื่องเสมือน Java เพื่อรองรับการดึงอินสแตนซ์
การอ้างอิงทั้งหมด :: เปิดกล่องโต้ตอบเพื่อแสดงวัตถุ Java ทั้งหมดที่อ้างอิงตัวแปร
เปลี่ยนค่า :: เปลี่ยนค่าของตัวแปร ฟังก์ชั่นนี้สามารถใช้ร่วมกับ Drop to Frame สำหรับการดีบักโปรแกรม ใช้ฟังก์ชั่นทั้งสองนี้แทนการถอดรหัสใหม่
ตัวแปรคัดลอก: คัดลอกค่าของตัวแปรโดยเฉพาะอย่างยิ่งเมื่อค่าของตัวแปรมีความยาวมาก (เช่นข้อมูล JSON) ฟังก์ชั่นนี้มีประโยชน์
ค้นหา: บางครั้งเมื่อมีตัวแปรมากมายในชั้นเรียนคุณสามารถค้นหาได้
4) มุมมองเบรกพอยต์ (มุมมองเบรกพอยต์)
1. แสดงจุดพักทั้งหมด
2. ใช้พอร์ตที่เลือกในหน้าต่างปัจจุบัน 1 และคลิกเปิดใช้งานอีกครั้ง
3. Exception Breakpoint
มุมมองเบรกพอยต์จะแสดงรายการจุดพักทั้งหมดที่คุณตั้งไว้ในช่วงเวลาการทำงานปัจจุบัน ดับเบิลคลิกที่เบรกพอยต์เพื่อเข้าสู่ตำแหน่งของเบรกพอยต์ในโปรแกรม นอกจากนี้คุณยังสามารถเปิดหรือปิดการใช้งานเบรกพอยต์ลบเพิ่มใหม่และจัดกลุ่มตามกลุ่มงานหรือจำนวนการเข้าชมจุด มีสองเทคนิคที่มีประโยชน์มากเมื่อใช้จุดพัก:
การนับ HIT: มันระบุจำนวนครั้งที่ส่วนโค้ดทำงานที่จุดพัก หนึ่งทั่วไปคือลูป หากการวนรอบจะถูกดำเนินการ 10 ครั้งและเธรดถูกระงับค่านับจำนวนฮิตคือ 10 และลูปปัจจุบันจะแขวนเมื่อมันถูกดำเนินการที่ 9
เงื่อนไข: ตามชื่อแนะนำมันเป็นการตัดสินตามเงื่อนไข ตัวอย่างเช่นเมื่อเราจำเป็นต้องวนรอบตัวแปร i == 10 เธรดระงับแล้วเงื่อนไขจะถูกตั้งค่าเป็น i == 10 และเลือกระงับเมื่อ "จริง"
หากเลือกทั้งการนับจำนวนและเงื่อนไขด้านบนมันจะไม่ถูกต้องหากการตั้งค่านิพจน์และค่าไม่สมเหตุสมผล หากคุณเลือกระงับเมื่อค่าเปลี่ยนค่าเงื่อนไขอาจแขวนเมื่อค่าตัวแปรเปลี่ยนไป
5) มุมมองนิพจน์ (มุมมองนิพจน์)
1. การแสดงออก
2. คลิกที่นี่เพื่อเพิ่มนิพจน์ใหม่
ในการค้นหาค่าของนิพจน์ในตัวแก้ไขของมุมมองการดีบักให้เลือกทั้งบรรทัดด้วยชุดเบรกพอยต์และเลือกตัวเลือกการตรวจสอบในเมนูบริบท นิพจน์ได้รับการประเมินในบริบทของเฟรมสแต็กปัจจุบันและผลลัพธ์จะแสดงในมุมมองนิพจน์ของหน้าต่างแสดงผล ตัวอย่างเช่นหากฉันต้องการคำนวณค่าของตัวแปร A+B ฉันสามารถเพิ่มนิพจน์ลงในมุมมองนิพจน์: A+B
6) แสดงมุมมอง
คุณสามารถใช้มุมมองนี้เพื่อป้อนหรือคำนวณรหัสใหม่ รหัสนี้ดำเนินการในบริบทของตำแหน่งการดีบักปัจจุบันซึ่งหมายความว่าคุณสามารถใช้ตัวแปรทั้งหมดและแม้แต่ผู้ช่วยเนื้อหา ในการเรียกใช้รหัสของคุณเพียงทำเครื่องหมายและใช้เมนูคลิกขวาหรือ Ctrl+U (ดำเนินการ) หรือ Ctrl+Shift+I (ตรวจสอบ)
7) การดูรหัสหน้าต่างเสริม
1. ดูรหัส:
มุมมองรหัสใช้เพื่อแสดงรหัสเฉพาะ ส่วนสีเขียวหมายถึงรหัสที่กำลังดำเนินการอยู่ในปัจจุบัน
| เครื่องหมาย | การทำงาน | คีย์ทางลัด | อธิบาย |
|---|---|---|---|
| 11.1 ~ 11.5 | ลำดับชั้นพิมพ์ด่วน | ctrl+t | ตรวจสอบระดับการสืบทอดของคลาสปัจจุบันและอินเทอร์เฟซ เมื่อป้อนโดยค่าเริ่มต้นคลาสย่อยของการสืบทอด/การใช้งานของคลาส/เมธอดปัจจุบันจะปรากฏขึ้นและ sub-interface 11.1 จะปรากฏขึ้น; Ctrl+T อีกครั้ง SuperClass/Interface 11.2 การสืบทอด/การใช้งานของคลาสปัจจุบันและอินเตอร์เฟสจะปรากฏขึ้น ในระหว่างการดีบักฟังก์ชั่นนี้มักจะใช้เพื่อดูคลาสการใช้งาน 11.4 ที่การเรียกวิธีการของอินเตอร์เฟสหรือคลาสนามธรรมและนำทางโดยตรงไปยังวิธีการใช้งานที่สอดคล้องกัน 11.5 |
| เค้าโครงอย่างรวดเร็ว | Ctrl+O | ตรวจสอบโครงร่างของคลาสปัจจุบันรวมถึงวิธีการคุณลักษณะ ฯลฯ ; มันมีประโยชน์เพียงเล็กน้อย | |
| เปิดประกาศ | F3 | ดูคำจำกัดความของตัวแปรคุณสมบัติและวิธีการ |
2. โทรหาลำดับชั้น:
| เครื่องหมาย | การทำงาน | คีย์ทางลัด | อธิบาย |
|---|---|---|---|
| 12.1 ~ 12.2 | เปิดลำดับชั้นของการโทร | ctrl+alt+h | ตรวจสอบวิธีการที่เรียกว่าระดับคุณสามารถดูว่าวิธีการปัจจุบันเรียกว่า 12.1 หรือวิธีการปัจจุบันเรียกคลาสอื่น ๆ ของวิธีการ 12.2 |
3. ประเภทหน้าต่างลำดับชั้น:
| เครื่องหมาย | การทำงาน | คีย์ทางลัด | อธิบาย |
|---|---|---|---|
| 13.1 ~ 13.4 | ลำดับชั้นแบบเปิด | F4 | ตรวจสอบระดับการสืบทอดคุณสามารถดูระดับการสืบทอดของชั้นเรียนรวมถึงคลาสพาเรนต์ของเด็กชั้น 13.1 หรือระดับการสืบทอดอินเตอร์เฟส 13.2 ที่ดำเนินการโดยชั้นเรียน โครงร่างของคลาส 13.3 และ 13.4 จะแสดงทางด้านขวาตามคลาส/อินเทอร์เฟซที่เลือก 13.3 สามารถเลือกได้ว่าจะแสดงคุณสมบัติวิธีการ ฯลฯ ของอินเทอร์เฟซคลาสแม่/แม่แม่หรือไม่ |
4. หน้าต่างค้นหา:
| เครื่องหมาย | การทำงาน | คีย์ทางลัด | อธิบาย |
|---|---|---|---|
| 14.1 | การประกาศ | ctrl+g | ลายเซ็นวิธีการเดียวกันนี้ถูกกำหนดไว้ในพื้นที่ทำงานและในแพ็คเกจ JAR ของบุคคลที่สาม 14.1 |
| 14.2 | การอ้างอิง | ctrl+shif+g | ตัวแปรคุณสมบัติและวิธีการที่เลือกในปัจจุบันมีการอ้างอิงในพื้นที่ทำงานและในแพ็คเกจ JAR ของบุคคลที่สาม 14.2 |
| 14.3 | ctrl+shift+u | ดูที่ตัวแปรคุณสมบัติและวิธีการปรากฏใน Class14.3 ปัจจุบัน | |
| 14.4 | การใช้ | ดูคลาส 14.8 ที่ใช้อินเทอร์เฟซปัจจุบัน | |
| 14.4 ~ 14.7 | วิธีการแสดง | คุณสามารถเลือกวิธีการแสดงผลที่แตกต่างกันและดูภาพสำหรับรายละเอียด |
2. ดีบัก
1. เบรกพอยต์
ในไฟล์ซอร์สโค้ดที่บรรทัดที่ทำเครื่องหมายไว้ด้านหน้าของบรรทัดของรหัสที่คุณต้องการตั้งค่าเบรกพอยต์คลิกสองครั้งที่ปุ่มเมาส์ซ้ายเพื่อตั้งค่าเบรกพอยต์และดับเบิลคลิกอีกครั้งที่ตำแหน่งเดียวกันเพื่อยกเลิกจุดพัก บางครั้งเรายังมีความต้องการนี้นั่นคือฉันไม่ต้องการเรียกใช้รหัสทีละบรรทัด ตัวอย่างเช่น A for loop จะวนซ้ำมากกว่า 1,000 ครั้ง ฉันแค่อยากให้เธรดแขวนไว้สำหรับการดีบักในครั้งที่ 500 ในเวลานี้เราสามารถใช้จุดพักที่มีเงื่อนไข ตั้งค่าเบรกพอยต์เงื่อนไข: เราสามารถตั้งค่าเงื่อนไขทริกเกอร์สำหรับจุดพักนี้ เมื่อพบเงื่อนไขที่แน่นอนเราสามารถเริ่มการดีบัก คุณสามารถคลิกขวาที่เบรกพอยต์และเลือกคุณสมบัติเบรกพอยต์เพื่อเข้าสู่หน้าการตั้งค่าเบรกพอยต์ เมื่อเราพูดถึงมุมมองเบรกพอยต์เราได้เรียนรู้การใช้จำนวนการเข้าชมและเงื่อนไข ที่นี่เราสามารถกำหนดเงื่อนไขและจำนวนการประหารชีวิต
1.1) ประเภทเบรกพอยต์และหน้าต่างเบรกพอยต์
มีจุดพักห้าประเภทที่สามารถตั้งค่าได้ในระหว่างการดีบัก:
1. จุดพักบรรทัด: จุดพักตามเงื่อนไขตามชื่อหมายถึงเป็นจุดพักที่มีเงื่อนไขบางประการ เฉพาะเมื่อเงื่อนไขที่กำหนดโดยผู้ใช้จะตรงกับรหัสจะหยุดเมื่อมันทำงานไปยังจุดพัก
2. วิธีการเบรกพอยต์: สิ่งพิเศษเกี่ยวกับจุดพักของวิธีการคือพวกเขาสามารถถูกตีในซอร์สโค้ดของ JDK เนื่องจาก JDK ลบข้อมูลการดีบักในระหว่างการรวบรวมจุดพักสามัญไม่สามารถถูกโจมตีได้ แต่เป็นไปได้ คุณสามารถดูสแต็กการโทรผ่านวิธีนี้
3. สังเกตจุดพัก (เบรกพอยต์ของนาฬิกา-สมาชิกเปลี่ยนการเข้าถึงตัวแปร)
4. การเปิดเผยจุดพัก
5. จุดเบรกพอยต์ของคลาส
การตั้งค่าของเบรกพอยต์แต่ละประเภทแตกต่างกันเล็กน้อย คุณสามารถคลิกขวาที่เบรกพอยต์ -> คุณสมบัติเบรกพอยต์เพื่อตั้งค่า แต่โดยทั่วไปจะมีอินเทอร์เฟซการตั้งค่าอย่างรวดเร็วในหน้าต่างเบรกพอยต์ มีตัวกรองมากขึ้นในคุณสมบัติเบรกพอยต์ซึ่งจริง ๆ แล้วค่อนข้างไร้ประโยชน์และไม่มีประโยชน์มาก
ปุ่มลัดที่เกี่ยวข้องกับเบรกพอยต์:
| คีย์ทางลัด | อธิบาย |
|---|---|
| ctrl+shift+b | เบรกพอยต์ขนาดใหญ่/ยกเลิกจุดพักที่เคอร์เซอร์ |
| ctrl+alt+b | ไม่สนใจจุดพักทั้งหมด |
| Alt+Shift+Q, B | เปิดใช้งานหน้าต่างเบรกพอยต์ |
1. เบรกพอยต์บรรทัด: จุดพัก 1.1 และ 1.4 ในบรรทัดที่แน่นอนในวิธีการ จุดเบรกพอยต์สามารถตั้งค่าเงื่อนไขของการระงับเธรด/VM 1.3 และจำนวนการเข้าถึง 1.2
เงื่อนไขใน 1.3 คือเมื่อฤดูใบไม้ผลิลงทะเบียนคำจำกัดความถั่ว (registerBeanDefinition) หากเป็น org.springframework.demo.mybean เธรดจะถูกระงับและคุณสามารถเริ่มการดีบักทีละขั้นตอน
สำหรับการใช้จำนวน Hit 1.2 โดยทั่วไปจะอยู่ในลูป หากมีปัญหาเกี่ยวกับการประมวลผลวัตถุ nth ให้ตั้งค่าจำนวน hit = n ระหว่างการลดลงอีกครั้งคุณสามารถหยุดการดีบักเมื่อจำนวนลูปที่ต้องทำการดีบัก
2. วิธีการพัก: จุดพัก 2.1 และ 2.2 บนวิธีการ ข้อได้เปรียบของเบรกพอยต์ของวิธีคือพวกเขาสามารถหยุดและดีบักเมื่อเข้าหรือออกจากวิธีการ พวกมันคล้ายกับเบรกพอยต์แถวและเฉพาะจุดพักแถวและจุดพักของวิธีการเท่านั้นที่มีฟังก์ชั่นของเงื่อนไขการตั้งค่าและเวลาการเข้าถึง
อย่างไรก็ตามเบรกพอยต์ของวิธีการมีข้อได้เปรียบอื่น หากรวบรวมรหัสจุดเบรกพอยต์ที่ระบุไม่ทำงานดังนั้นคุณสามารถกดจุดพักได้เท่านั้น
หากคุณสนใจคุณสามารถลบตะขอก่อนเพิ่มหมายเลขบรรทัด ... ผ่าน A1 และดีบักและดู
3. สังเกตจุดพัก: จุดพัก 3.1 และ 3.3 กดตัวแปรสมาชิก ตัวแปรสมาชิกวัตถุเท่านั้นที่มีผลกระทบตัวแปรสมาชิกคงที่ไม่ทำงาน
คุณสามารถตั้งค่าเธรด/VM 3.2 ที่จะถูกระงับเมื่อตัวแปรถูกเข้าถึงหรือตั้งค่านั่นคือวิธีการทั้งหมดของการเข้าถึงหรือตั้งค่าตัวแปรสมาชิกที่คล้ายกับ 3.4 จะถูกตรวจสอบ
4. เบรกพอยต์ข้อยกเว้น: เบรกพอยต์ข้อยกเว้นสามารถเพิ่มผ่าน 4.6 หรือคลิกเอาต์พุตข้อมูลคลาสข้อยกเว้นในข้อมูลบันทึก
ข้อยกเว้นเบรกพอยต์ 4.1 เมื่อมีข้อยกเว้นเกิดขึ้นในระบบเธรด/VM จะถูกระงับที่ตำแหน่งการขว้างของข้อยกเว้นที่จับได้หรือที่ตำแหน่งการขว้างด้วยข้อยกเว้น 4.2 และ 4.4 ที่โปรแกรมไม่จับและยังสามารถระบุได้ว่า subclasses ที่มีข้อยกเว้นจะถูกตรวจพบ 4.3 และ 4.5
นอกเหนือจากชุดช่วงล่างที่ผิดปกติด้านบนคุณสามารถตั้งค่าการระงับการดำเนินการจาก Java-> debug ส่วนใหญ่สอง:
1. ไม่ว่าจะเป็นการระงับการดำเนินการเกี่ยวกับข้อยกเว้นที่ไม่ถูกต้องเกิดขึ้นหรือไม่ ในระหว่างการดีบักมักจะมีข้อยกเว้นที่ส่งผลกระทบต่อการดีบัก แต่ไม่มีการตั้งค่าเบรกพอยต์ข้อยกเว้นคุณสามารถตรวจสอบตัวเลือกนี้ได้
2. ไม่ว่าจะถูกระงับระหว่างข้อผิดพลาดในการรวบรวมสถานการณ์นี้มักจะเกิดขึ้นเมื่อทำการดีบักและแก้ไขรหัส
อีกสิ่งหนึ่งที่กล่าวถึงคือแอปพลิเคชันที่มีวิธีการหลักเริ่มต้นขึ้น คุณสามารถตรวจสอบหยุดใน Main A3 ในการกำหนดค่าการดีบัก เมื่อโปรแกรมเข้าสู่เธรดจะถูกระงับและรอการดีบัก
5. การโหลดคลาสการโหลด: เบรกพอยต์ 5.1 ถูกตีในชื่อคลาส ไม่สามารถตั้งค่าเบรกพอยต์การโหลดคลาสบนอินเทอร์เฟซ แต่คลาสนามธรรมก็โอเค อย่างไรก็ตามในระหว่างการดีบักจุดพักจะไม่เข้าสู่ classloader อย่างชัดเจน รายการทีละขั้นตอนจะเป็นที่รู้จักกันในการป้อนวิธีการก่อสร้าง subclass หลังจากระงับเธรดคลาสที่ไม่ได้รับการรับรองจะเข้าสู่ classloader (หากไม่มีการกรองตัวกรอง) 5.3 ไม่ว่าจะเป็นจุดพักการโหลดคลาสจะถูกตีบนคลาสนามธรรมหรือไม่ใช่แบบแอคทีสเธรด/VM5.2 จะถูกระงับเมื่อคลาสถูกโหลดเป็นครั้งแรกหรือคลาสย่อยแรกจะถูกโหลดเป็นครั้งแรก
2. ดีบักโปรแกรม
1. ดีบั๊กโปรแกรมภาษา Java ท้องถิ่น
ในบรรดาการดีบักทั้งหมดการดีบักโปรแกรม Java นั้นง่ายที่สุดส่วนใหญ่รวมถึงการตั้งค่าเบรกพอยต์การเริ่มต้นการดีบักก้าวผ่านและสิ้นสุดการดีบัก
1) กำหนดจุดพัก:
2) เริ่มการดีบัก: Eclipse ให้สี่วิธีในการเริ่มต้นการดีบักของโปรแกรม (เปิดตัว) คือผ่านเมนู (เรียกใช้> ดีบั๊ก), ไอคอน ("Green Bed Bug"), Right-> Debug As และทางลัด (F11) ในเรื่องนี้มันคล้ายกับคำสั่งอื่น ๆ (เช่น Run)
พรอมต์ปรากฏขึ้น คุณต้องเปลี่ยนไปใช้พื้นที่ทำงานดีบั๊กตรวจสอบ "จำการตัดสินใจของฉัน" อย่าลืมเลือกและจะไม่มีการแจ้งเตือนในครั้งต่อไปจากนั้นคลิก [ใช่]
3) การดำเนินการขั้นตอนเดียว: ส่วนใหญ่ใช้หลายมุมมองที่กล่าวถึงข้างต้นสำหรับการดีบักซึ่งมีปุ่มหลายปุ่มในมุมมองการดีบักมีคีย์ทางลัด:
ขั้นตอน retuen (F7)
ก้าวข้าม (F6)
ก้าวเข้าสู่ (F5)
สิ้นสุดการดีบัก: ยุติการดีบักของโปรแกรมท้องถิ่นผ่านคำสั่งยุติ
2. กรณี
สถานการณ์ที่ 1: เสี่ยวหมิงเขียนผู้ดำเนินการงานซึ่งดำเนินการอย่างต่อเนื่อง หลังจากทำงานออนไลน์เป็นระยะเวลาหนึ่งเขาพบว่ามีความเป็นไปได้ที่จะเกิดความล้มเหลว หลังจากทำงานเป็นระยะเวลาหนึ่งผู้ดำเนินการงานก็ออกจากผิดปกติ เพราะมันเป็นตัวชี้โมฆะเสี่ยวหมิงจึงต้องการดีบักในท้องถิ่นและไม่รู้ว่าจุดพักอยู่ที่ไหน ปัญหานี้เป็นเหตุการณ์ที่น่าจะเป็นและอาจไม่ปรากฏ ดังนั้นหลังจากเซียวหมิงดีบักหลายครั้งเขาก็เวียนหัวและไม่เห็นรหัสอย่างชัดเจน เสี่ยวหมิงต้องการที่จะมีจุดพักและหยุดและปล่อยให้เขาพบปัญหาเมื่อมีข้อยกเว้นตัวชี้โมฆะเกิดขึ้น นั่นจะดีมาก
จุดพักข้อยกเว้น
ข้อยกเว้นเบรกพอยต์: ในกระบวนการค้นหาปัญหาคุณมักจะพบจุดพักที่ไม่สามารถตีไปยังตำแหน่งที่เหมาะสมซึ่งแตกต่างจากจุดทริกเกอร์ของปัญหามาก ดังนั้นในเวลานี้คุณอาจลองจุดพักข้อยกเว้น ตามชื่อแนะนำจุดพักข้อยกเว้นหมายถึงจุดพักที่แขวนไว้โดยอัตโนมัติหลังจากโยนข้อยกเว้นบางอย่าง
คลิกที่ส่วนสีแดงเพื่อเพิ่มจุดพักผิดปกติ
ป้อนประเภทของข้อยกเว้นที่คุณต้องการค้นหาเช่น nullpointerexception ด้วยวิธีนี้หลังจากข้อยกเว้น Nullpointerexception ใด ๆ ถูกโยนลงไปในระบบเธรดปัจจุบันจะถูกระงับทำให้คุณมีโอกาสค้นหาปัญหา
ฉากที่ 2: เสี่ยวหมิงเขียนวงดนตรีขนาดใหญ่ เมื่อปรับแต่งรหัสเซียวหมิงพบว่าเมื่อใดก็ตามที่วนมาถึงครั้งที่ 100,000 มีปัญหาและไม่เป็นไปตามความคาดหวังของเขา ดังนั้นเสี่ยวหมิงจึงสร้างจุดพักในห่วงอยากเห็นสิ่งที่เกิดขึ้น แต่เสี่ยวหมิงไม่เคยคิดเลยว่ามันจะยากแค่ไหนที่จะไปถึง 100,000 ลูป ในเวลานี้เสี่ยวหมิงเริ่มคิดมากไปแล้วถ้าอาจมีจุดพัก:
หากจำนวนลูป == 100000 เธรดจะหยุด
จุดพักที่มีเงื่อนไข
ดังที่แสดงในภาพทางด้านขวาวน 1,000 ครั้ง หากคุณต้องการหยุดเมื่อวนซ้ำถึง 500 ครั้งคุณสามารถสร้างจุดพักที่มีเงื่อนไขและคลิกขวาที่เบรกพอยต์เพื่อแขวนคุณสมบัติเบรกพอยต์
เลือกสภาพเปิดใช้งาน
ในช่องว่างเพิ่มสภาพของคุณเอง หากเงื่อนไขส่งคืนจริงเธรดจะถูกระงับ หากเท็จข้อยกเว้นจะถูกละเว้น
Hit Count อย่างเป็นทางการระงับเธรดหลังจากเบรกพอยต์ผ่านไป หากตั้งค่าเป็น 500 จะมีการแสดงออก 499 ครั้งแรกและจะไม่หยุดหลังจากจุดพัก เมื่อเบรกพอยต์เป็นครั้งที่ 500 เบรกพอยต์จะระงับเธรดปัจจุบัน
การแสดงออก
นิพจน์สามารถดูบรรทัดคำสั่งบางอย่างที่ไม่สามารถใช้ได้ในรหัสปัจจุบันเพื่ออำนวยความสะดวกในการวางตำแหน่งของปัญหา
ฉากที่ 3: Xiao Ming ได้พบปัญหาเมื่อเร็ว ๆ นี้ มีปัญหาอยู่เสมอเมื่อโทรหาปลั๊กอินของบุคคลที่สาม Xiao Ming สงสัยว่ามันเป็นข้อบกพร่องของปลั๊กอินของบุคคลที่สาม แต่ Xiao Ming ไม่พบซอร์สโค้ดและไม่สามารถแก้ไขข้อบกพร่องได้ เสี่ยวหมิงควรทำอย่างไร?
การดีบักกำหนดเป้าหมายไปยังปลั๊กอินของบุคคลที่สาม
1. ถอดรหัสรหัสโดยใช้เครื่องมือถอดรหัส
2. กรองซอร์สโค้ดที่ถอดรหัส
3. แก้ไขข้อผิดพลาดในการรวบรวมซอร์สโค้ด
4. ดีบัก
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น