อาการอธิบายได้อย่างสมบูรณ์แบบกรณีที่คลาสที่พบไม่มีแหล่งที่เกี่ยวข้อง (หรือที่ได้รับมอบหมาย)
- คุณสามารถเชื่อมโยงแหล่งที่มาสำหรับคลาส JDK ในการตั้งค่า> Java> JRE ที่ติดตั้งแล้ว หากตรวจพบ JRE (ไม่ใช่ JDK) เป็น JRE เริ่มต้นที่จะใช้คลาส JDK ของคุณจะไม่มีแหล่งที่แนบมา โปรดทราบว่าไม่ใช่คลาส JDK ทั้งหมดที่ได้จัดเตรียมแหล่งข้อมูลไว้บางส่วนมีการแจกจ่ายในรูปแบบไบนารีเท่านั้น
- เรียนจากเส้นทางการสร้างของโครงการเพิ่มด้วยตนเองต้องให้คุณแนบแหล่งข้อมูลที่เกี่ยวข้องด้วยตนเอง แหล่งที่มาสามารถอยู่ในไฟล์ zip หรือ jar ในเวิร์กสเปซหรือในระบบไฟล์ Eclipse จะสแกนซิปดังนั้นแหล่งที่มาของคุณไม่จำเป็นต้องอยู่ในรูทของไฟล์เก็บถาวรตัวอย่างเช่น
- คลาสจากการพึ่งพาที่มาจากปลั๊กอินอื่น (maven, PDE, ฯลฯ ) ในกรณีนี้ขึ้นอยู่กับปลั๊กอินที่จะให้แหล่งที่มา
- PDEจะต้องการให้แต่ละปลั๊กอินมีบันเดิลXXX.source ที่สอดคล้องกันซึ่งมีแหล่งที่มาของปลั๊กอิน ข้อมูลเพิ่มเติมสามารถพบได้ที่นี่และที่นี่
- m2eclipseสามารถดึงซอร์สและ javadocs สำหรับการพึ่งพา Maven หากมี คุณลักษณะนี้ควรเปิดใช้งานการตั้งค่าm2eclipse (ตัวเลือกนี้มีชื่อบางอย่างเช่น " แหล่งดาวน์โหลดและ javadocs "
- สำหรับปลั๊กอินอื่น ๆ คุณจะต้องศึกษาเอกสารของพวกเขา
- คลาสที่โหลดจากโครงการของคุณจะถูกจับคู่โดยอัตโนมัติกับแหล่งที่มาจากโครงการ
แต่จะเกิดอะไรขึ้นถ้า Eclipse ยังแนะนำให้คุณแนบซอร์สแม้ว่าฉันจะตั้งคลาสและแหล่งที่มาของมันอย่างถูกต้อง:
นี่หมายถึงว่า Eclipse สามารถค้นหาชั้นเรียนจากที่ต่างไปจากที่คุณคาดไว้ ตรวจสอบเส้นทางการค้นหาต้นทางของคุณเพื่อดูว่ามันอาจทำให้คลาสผิด อัปเดตเส้นทางให้สอดคล้องกับสิ่งที่คุณค้นพบ
Eclipse ไม่พบสิ่งใดเลยเมื่อกดเบรกพอยต์:
สิ่งนี้เกิดขึ้นเมื่อคุณเป็นพา ธ การค้นหาต้นทางไม่มีคลาสซึ่งโหลดอยู่ในรันไทม์ในปัจจุบัน แม้ว่าคลาสจะอยู่ในเวิร์กสเปซ แต่ก็สามารถมองไม่เห็นกับคอนฟิกูเรชันการเรียกใช้เนื่องจาก Eclipse ติดตามพา ธ การค้นหาต้นทางอย่างเคร่งครัดและแนบเฉพาะการขึ้นต่อกันของโปรเจ็กต์ซึ่งขณะนี้ถูกดีบั๊ก
ข้อยกเว้นคือการรวมกลุ่มการแก้จุดบกพร่องในPDE ในกรณีนี้เนื่องจากรันไทม์ประกอบด้วยหลายโครงการซึ่งไม่จำเป็นต้องประกาศการพึ่งพาซึ่งกันและกัน Eclipse จะค้นหาคลาสในเวิร์กสเปซโดยอัตโนมัติแม้ว่าจะไม่พร้อมใช้งานในพา ธ การค้นหาต้นทาง
ฉันไม่เห็นตัวแปรเมื่อกดเบรกพอยต์หรือเพิ่งเปิดแหล่งที่มา แต่ไม่ได้เลือกบรรทัดเบรกพอยต์:
ซึ่งหมายความว่าในรันไทม์ทั้ง JVM หรือคลาสเองไม่มีข้อมูลการดีบักที่จำเป็น แต่ละครั้งที่มีการรวบรวมข้อมูลการดีบักสามารถแนบ เพื่อลดพื้นที่เก็บข้อมูลของคลาสบางครั้งข้อมูลนี้จะถูกละเว้นซึ่งทำให้การดีบักรหัสดังกล่าวเป็นความเจ็บปวด โอกาสเดียวของคุณคือลองและคอมไพล์ใหม่เมื่อเปิดใช้งานการดีบัก
Eclipse source Viewer แสดงบรรทัดที่แตกต่างจากที่เรียกใช้จริง:
บางครั้งมันสามารถแสดงว่ามีการใช้พื้นที่ว่างเช่นกัน ซึ่งหมายความว่าแหล่งที่มาของคุณไม่ตรงกับรุ่นรันไทม์ของคลาส แม้ว่าคุณจะคิดว่ามันเป็นไปไม่ได้ แต่ก็เป็นเช่นนั้นดังนั้นให้แน่ใจว่าคุณตั้งค่าแหล่งข้อมูลที่ถูกต้อง หรือรันไทม์ของคุณตรงกับการเปลี่ยนแปลงล่าสุดของคุณขึ้นอยู่กับสิ่งที่คุณพยายามทำ