การเขียนโค้ดมีชัยไปกว่าครึ่ง มันยังต้องทำเพื่อให้ทำงานได้อย่างถูกต้อง IDE และเครื่องมือแก้ไขจุดบกพร่องช่วยเราได้มากในเรื่องนี้
เมื่อใช้ IntelliJ IDEA เป็นตัวอย่าง ฉันเสนอให้ทำความคุ้นเคยกับวิธีที่เราจะค้นหาว่าเกิดอะไรขึ้นกับโค้ดของเราเมื่อมันทำงาน การดีบักเป็นหัวข้อกว้างๆ ดังนั้นการรีวิวนี้จึงไม่ได้นำเสนอการดำน้ำลึกเหมือนนักดำน้ำ แต่ฉันหวังว่าจะได้ดำน้ำตื้นอย่างแน่นอน)
ต่อไปเราจำเป็นต้องรันโปรเจ็กต์ที่เราเลือกบนเซิร์ฟเวอร์ กระบวนการนี้อธิบายไว้ในเอกสารประกอบขนาดเล็กที่สามารถพบได้ในตัวโครงการ:
หลังจากนี้ ในบันทึกเซิร์ฟเวอร์ เราจะเห็นว่าโปรเจ็กต์ใหม่ถูก "ปรับใช้" อย่างไร:
หลังจากนั้นเราไปที่หน้านั้น
หากทุกอย่างเรียบร้อยดี เราจะเห็นข้อความเกี่ยวกับเรื่องนี้ด้านล่าง:
กด Enter เพื่อไปยังแหล่งที่พบ:
ดังนั้นเราจะเห็นว่าตอนลงทะเบียน จะมีการเรียก memberController.register เห็นได้ชัดว่านี่ต้องเป็นคลาส Java บางชนิด คลิก
แท้จริงแล้วมีชั้นเรียนเช่นนี้ เข้าไปในนั้นกันเถอะ เห็นได้ชัดว่าควรมีวิธีการลงทะเบียน คลิก
แท้จริงแล้วเราพบมันแล้ว เห็นได้ชัดว่าการ ลงทะเบียนเกิดขึ้นที่นี่ ในmemberRegistration.register กด Ctrl และคลิกที่วิธีการเพื่อ "ตกผ่าน":
ตอนนี้เรามาตั้งค่า "จุดพัก" หรือจุดพักกันดีกว่า นี่คือเครื่องหมายที่บอกว่าควรหยุดการทำงานของโค้ดไว้ที่ใด ในขณะนี้เราจะมีโอกาสได้เรียนรู้สิ่งที่น่าสนใจมากมาย คุณต้องคลิกตรงบริเวณด้านขวาของหมายเลขบรรทัด
ในหน้า http://localhost:8080/wildfly-hibernate4 กรอกข้อมูลในช่องต่างๆ แล้วคลิกปุ่มลงทะเบียน ไอคอนไอเดียบนแผงควบคุมจะกะพริบ:
ไปที่ Idea คุณจะเห็นว่ามีข้อมูลที่น่าสนใจมากมายในแผงแก้ไขข้อบกพร่อง:
ที่นี่คุณสามารถดูค่าของฟิลด์ของวัตถุได้ ตัวอย่างเช่น สมาชิกที่ลงทะเบียนประกอบด้วยอะไรบ้าง:
ยอดเยี่ยม. เราทำอะไรได้อีก? เราสามารถเปิดเมนูบริบทและเลือกประเมินนิพจน์ที่นั่น (หรือผ่านเมนูเรียกใช้ -> ประเมินนิพจน์) ยังดีกว่าบนแผงควบคุมดีบักเกอร์:
นี่เป็นความสามารถที่ยอดเยี่ยมที่เบรกพอยต์ โดยสามารถเข้าถึงทุกสิ่งที่จุดโค้ดนั้นสามารถเข้าถึงได้ เพื่อรันโค้ดใดๆ ก็ตามที่สามารถดำเนินการได้ที่จุดนั้น ตัวอย่างเช่น:
นอกจากนี้ยังมีปุ่มควบคุมบนแผงควบคุมดีบักเกอร์ที่รับผิดชอบตำแหน่งที่คุณต้องการย้ายการควบคุมโฟลว์ของโปรแกรม มหัศจรรย์ใช่ไหม) ด้วยการกดปุ่ม F8 (Step Out) เราจะเดินผ่านโค้ดโดยไม่ต้องป้อนวิธีการ ด้วยการกด F9 เราจะหยุดเดินผ่านบรรทัดโค้ดด้วยดีบักเกอร์ และให้ดีบักเกอร์ควบคุมการทำงานของโปรแกรม ถ้าเรากด F7 (Step Into) เราก็จะผ่านรหัสเข้าแต่ละวิธีที่เจอไปตลอดทาง อย่างไรก็ตามให้ความสนใจเป็นพิเศษกับบล็อกข้อมูลนี้:
นี่จะแสดงเธรดที่เราอยู่และวิธีการบนสแต็กของเธรดปัจจุบัน แต่นั่นไม่ใช่ทั้งหมด เพื่อความสะดวกคุณสามารถเปิดแท็บเฟรมได้ หากต้องการทำสิ่งนี้ จะต้องเปิดใช้งาน:
ตอนนี้บนแท็บเฟรม เราเห็นข้อมูลเกี่ยวกับการเปลี่ยนจากวิธีหนึ่งไปอีกวิธีหนึ่ง เนื่องจาก เริ่มเดินผ่านโค้ดโดยใช้ Step Into
ดังที่เราเห็น เราไม่สามารถถ่ายโอนไปยังตำแหน่งที่โปรแกรมกำลังดำเนินการอยู่ได้เสมอไป ขณะนี้เราอยู่ที่ "getDelegate:469, AbstractEntityManager(org.jboss.as.jpa.container)" แต่ในความเป็นจริงแล้ว เรากำลังดำเนินการอยู่ นี่คือหลักฐานโดยคลาสที่ระบุโดย:
ลองดูที่นี้ อย่างที่เราทราบ มันชี้ไปที่วัตถุปัจจุบัน เราอยู่ที่ TransactionScopedEntityManager เหตุใด Idea จึงไม่สามารถแสดงรหัสให้เราดูได้ ความจริงก็คือปัจจุบัน IntelliJ Idea ไม่ทราบเกี่ยวกับ TransactionScopedEntityManager ใด ๆ เนื่องจาก มันไม่ได้เชื่อมต่อกับโครงการของเรา (ไม่อยู่ในการพึ่งพาโครงการ) เมื่อแอปพลิเคชันเซิร์ฟเวอร์กำลังทำงาน จะมีไลบรารีต่างๆ มากมายที่ทำงานอยู่ภายในนั้น แต่เรารู้น้อยมากเกี่ยวกับพวกเขาเพราะ... โดยทั่วไปเราไม่จำเป็นต้องเจาะลึกถึงระบบภายใน เราแค่ต้องการให้มันใช้งานได้ แต่บางครั้งความสนใจในการทำงานหรือกีฬาก็ต้องการมัน จากนั้น คุณจะต้องแจ้ง Idea เกี่ยวกับไลบรารีนี้ เพื่อจะได้ทราบว่าจะรับรหัสชั้นเรียนได้ที่ไหน
ตอนนี้เรามารอผลกัน เขาจะไม่ให้คุณรอ)
ตอนนี้เราต้องค้นหาซอร์สโค้ดของมันที่ไหนสักแห่ง และมี 2 ตัวเลือก:
ตอนนี้เรามาดูการอธิบายการพึ่งพากันต่อไป ในหน้านี้คุณสามารถดาวน์โหลดซอร์สโค้ดได้ เยี่ยมมาก ตอนนี้เราได้ดาวน์โหลดโค้ดแล้ว สิ่งที่เหลืออยู่คือการเชื่อมต่อห้องสมุด มันเชื่อมต่ออย่างง่ายดายมาก เราจำเป็นต้องเปิดการตั้งค่าโครงการ:
ที่นั่นเราเลือก "ไลบรารี" และเพิ่มซอร์สโค้ดที่ได้รับในส่วน "แหล่งที่มา" และในส่วน "คลาส" เราระบุไฟล์ jar ของไลบรารีจากไดเร็กทอรี WildFly ซึ่งเราพบโดยใช้ Far Manager หลังจากนี้ เมื่อเรานำทางผ่าน F7 เราจะเห็นเนื้อหาของคลาส AbstractEntityManager และ TransactionScopedEntityManager และจะพร้อมใช้งานผ่านการค้นหาตามคลาสโดยใช้ Ctrl+N อีกด้วย
ตอนนี้เบรกพอยต์จะเริ่มทำงานเมื่อชื่อแม็กซิมิเลียนเท่านั้น เมื่อคลิกปุ่มเพิ่มเติม ชุดการตั้งค่าเพิ่มเติมสำหรับจุดพักจะพร้อมใช้งานสำหรับคุณ
และสร้างกฎใหม่สำหรับประเภทข้อยกเว้นที่เลือก:
ตัวอย่างเช่น สำหรับ NPE:
#เวียเชสลาฟ
การแนะนำ
ส่วนหนึ่งของการเขียนโค้ดคือการดีบักมัน และหากงานของคุณมีการรองรับโค้ด ก็จะมีการดีบักมากยิ่งขึ้น นอกจากนี้ ด้วยความช่วยเหลือในการดีบั๊ก คุณสามารถตรวจสอบการทำงานของไลบรารีและเฟรมเวิร์กที่ใช้งานได้อย่างลึกซึ้งที่สุดเท่าที่คุณจะดำดิ่งลงไปในโค้ดของคนอื่นได้ ในการดำน้ำเราจะต้อง:- สภาพแวดล้อมการพัฒนา: IntelliJ Idea Community Editionฟรี
- ติดตั้งมาเวน แล้ว
- แอปพลิเคชันเซิร์ฟเวอร์ WildFly 12.0.0.สุดท้าย
- ซอร์สโค้ดสำหรับตัวอย่างอย่างเป็นทางการ: ซอร์สโค้ดเริ่มต้นอย่างรวดเร็ว
bin\standalone.bat

\hibernate4\README.adoc
ตามที่ระบุในเอกสารนี้ เราจำเป็นต้องรันคำสั่งในไดเร็กทอรี hibernate4: mvn clean package wildfly:deploy
เรากำลังรอข้อความว่าการสร้างเสร็จสมบูรณ์แล้ว:


http://localhost:8080/wildfly-hibernate4
และควรแสดงหน้าที่มีแบบฟอร์ม “ สมัครสมาชิก ” ดังนั้นการเตรียมการทดลองของเราจึงเสร็จสิ้นและเริ่มได้)) จะมีภาพมากมายรออยู่ข้างหน้าเพื่อความชัดเจน เตรียมตัวให้พร้อม)
ดีบักระยะไกล
ดังนั้นเราจึงจำเป็นต้องกำหนดค่าโหมด Debug เพื่อให้ IDE ของเราควบคุมการเรียกใช้โค้ดบนแอปพลิเคชันเซิร์ฟเวอร์ IntelliJ Idea มีสองเวอร์ชัน: ฟรี (ชุมชน) และจ่ายเงิน (ขั้นสูงสุด) ส่วนหลังสามารถทดลองใช้อย่างเป็นทางการได้ในรูปแบบของ EAP ในเวอร์ชัน Ultimate ทุกอย่างจะง่ายดาย - แอปพลิเคชันเซิร์ฟเวอร์สามารถเปิดใช้งานได้โดยตรงจาก IDE ในโหมดแก้ไขข้อบกพร่อง แต่ในเวอร์ชัน Community คุณต้องทำบางสิ่งด้วยตนเอง ดังนั้นลองพิจารณากรณีที่ซับซ้อนกว่านี้เช่น การตั้งค่าในเวอร์ชันชุมชน เวอร์ชันชุมชนมีข้อจำกัดบางประการ โดยเฉพาะอย่างยิ่ง คุณไม่สามารถเรียกใช้แอปพลิเคชันเซิร์ฟเวอร์จากเซิร์ฟเวอร์ดังกล่าวได้ แต่คุณสามารถตั้งค่าการดีบักระยะไกล (Remote Debug) ได้เมื่อมีเซิร์ฟเวอร์ที่ทำงานอยู่พร้อมแอปพลิเคชันที่เราต้องการแยกจากกัน ลองใช้คำอธิบายของการตั้งค่าจากที่นี่: Remote debug Wildfly ใน IntelliJ Idea community edition (การตั้งค่า Remote Run Configuration สำหรับพอร์ต 8787) หลังจากการกำหนดค่า เราจะเปิดตัวการกำหนดค่าใหม่ในโหมด Debug:

กระบวนการแก้ไขข้อบกพร่อง
มาตรวจแก้จุดบกพร่องในการบันทึกบันทึกกัน เพื่อที่จะทำสิ่งนี้ได้ เราต้องตัดสินใจก่อนว่าเราจะสำรวจสถานที่ใด ตัดสินจากหน้าต่างเราจำเป็นต้องมีปุ่ม "ลงทะเบียน" ลองค้นหามันในโค้ด ดังนั้นเราจึงต้องมีองค์ประกอบ ซึ่งควรมีข้อความ: "ลงทะเบียน" หรือเธอควรจะมีอะไรเกี่ยวข้องกับมัน คลิกCtrl+Shift+F
และค้นหา ลงทะเบียน ในเครื่องหมายคำพูด เราเห็นว่ามีอยู่อันหนึ่งบน index.xhtml


Ctrl+N
และค้นหา:

Ctrl+F12
และค้นหาวิธีการลงทะเบียน












การเชื่อมต่อไลบรารีบุคคลที่สามเพื่อการดีบัก
ก่อนอื่น เราต้องทำความเข้าใจก่อนว่าห้องสมุดประเภทใดที่ต้องเชื่อมต่อ วิธีแรกนั้นยากที่สุด - ค้นหาบนอินเทอร์เน็ต ความเร็วและผลลัพธ์ของการค้นหาผลลัพธ์ขึ้นอยู่กับว่าโครงการได้รับการจัดการได้ดีเพียงใด ตัวอย่างเช่น WildFly มีพื้นที่เก็บข้อมูลแบบเปิด ดังนั้นเมื่อเรา Google “TransactionScopedEntityManager” เราจะไปที่https://github.com/wildfly/wildfly/tree/master/jpa/subsystemและพบว่าเราต้องการ wildfly-jpa วิธีที่สองถูกต้อง เซิร์ฟเวอร์อยู่ที่ไหน ดูที่นั่น วิธีการต่างๆสามารถช่วยได้ ตัวอย่างเช่น บน Windows อาจเป็นFar Manager ด้านล่างนี้เป็นตัวอย่างของอัลกอริทึมการค้นหา เมื่อติดตั้งและเปิดใช้งานแล้ว ให้ใช้Tab เพื่อสลับ ไปที่แท็บใดแท็บหนึ่ง โดยใช้Alt+F1
แท็บด้านซ้ายหรือAlt+F2
ด้านขวา และเลือกพาร์ติชันที่เราต้องการบนฮาร์ดไดรฟ์ ค่อนข้างเป็นไปได้ที่ไดเร็กทอรี Far Manager นั้นเปิดอยู่ใน Far Manager หลังการติดตั้ง หากต้องการไปที่รูทของดิสก์ ให้Ctrl + \
กด ใช้Alt+F
เปิดหน้าต่างค้นหาเริ่มพิมพ์ชื่อไดเร็กทอรีแล้วกด Enter หลังจากพบไดเร็กทอรีแล้ว การค้นหานี้ฉลาดและเน้นไดเรกทอรีที่ตรงกับข้อความค้นหา หากคุณป้อนอักขระที่ไม่มีโฟลเดอร์ จะไม่สามารถป้อนอักขระดังกล่าวได้ วิธีนี้เราจะไปที่ไดเร็กทอรีแอปพลิเคชันเซิร์ฟเวอร์ สมมติว่าเราไม่รู้ว่าโมดูลอยู่ที่ไหนบนเซิร์ฟเวอร์ บางทีนี่อาจเป็นครั้งแรกในชีวิตที่คุณได้ยินเกี่ยวกับ WildFly บางประเภท ดังนั้นคลิกที่นี่ทันทีAlt+F7
เพื่อค้นหาไฟล์ ดังนั้นตรรกะจึงกำหนด: เราต้องการไฟล์ที่มีไลบรารี นั่นคือเราต้องการขวดโหล ควรมีคลาส TransactionScopedEntityManager อยู่ภายใน เพราะ class = file จากนั้นมองหา “contains” นั่นคือบางสิ่งเช่นนี้:


- versioneye.comที่มีประโยชน์สุดๆ
- พื้นที่เก็บข้อมูล Mavenกลาง


เบรกพอยต์แบบมีเงื่อนไข
ตอนนี้กลับมาที่ Break Points กันดีกว่า บางครั้งเราไม่ได้ต้องการหยุดเสมอไป แต่เพียงภายใต้เงื่อนไขบางประการเท่านั้น จะทำอย่างไร? และที่นี่ IDE ของเราก็จะช่วยเราเช่นกัน โดยการวางจุดพัก เราสามารถกำหนดเงื่อนไขให้กับมันได้ ตัวอย่างเช่น ใส่จุดแล้วคลิกขวา:
จุดพักบนข้อยกเว้น
บางครั้งเราอาจได้รับข้อผิดพลาดและเราต้องการติดตามที่มาของมัน จากนั้นเราสามารถเพิ่มเบรกพอยต์ได้ไม่ใช่ที่บรรทัดโค้ดเฉพาะ แต่ในตำแหน่งที่ข้อยกเว้นจะถูกส่งออกไป เมื่อต้องการทำเช่นนี้ คุณต้องขยายรายการเบรกพอยต์ทั้งหมด:


คลาส HotSwap
ดีบักเกอร์เป็นสิ่งมหัศจรรย์ นอกจากการดีบั๊กแล้วยังให้คุณเปลี่ยนคลาสได้อีกด้วย! ใช่ ทรัพยากร (เช่น หน้า xhtml) ไม่สามารถเปลี่ยนแปลงได้อย่างง่ายดาย แต่โค้ดของคลาส Java สามารถถูกแทนที่ได้ทันที (ซึ่งเรียกว่า Hot Swap) ในการดำเนินการนี้ เพียงเปลี่ยนคลาสโดยแนบดีบักเกอร์แล้วดำเนินการ Run -> โหลดคลาสที่เปลี่ยนแปลงใหม่ บทวิจารณ์ที่เป็นประโยชน์ในหัวข้อนี้: 4 วิธีฟรีในการเปลี่ยนโค้ดแบบ hot-swap บน JVMบทสรุป
ดีบักเกอร์เป็นเครื่องมืออันทรงพลังที่ช่วยให้นักพัฒนาสามารถเจาะลึกลงไปในโค้ดที่รันและศึกษามันในทุกรายละเอียด วิธีนี้ช่วยให้คุณแก้ไขข้อผิดพลาดที่น่าสับสนที่สุดได้ นอกจากนี้ยังช่วยให้คุณเข้าใจวิธีการทำงานของห้องสมุดบางแห่งได้ดียิ่งขึ้น แม้ว่าบทวิจารณ์สั้น ๆ ดังกล่าวจะค่อนข้างน่าประทับใจ แต่ฉันหวังว่ามันจะมีประโยชน์และน่าสนใจ หากใครสนใจเนื้อหานี้ คุณสามารถดำน้ำต่อได้โดยใช้ลิงก์ต่อไปนี้:
GO TO FULL VERSION