จะย้อนกลับไปใน Eclipse debugger ได้อย่างไร?


129

เป็นไปได้ไหมที่จะทำการย้อนกลับในการดีบักเกอร์ Eclipse โครงการปัจจุบันที่ฉันกำลังดำเนินการต้องใช้เวลาอย่างน้อย 5 วินาทีในการอ่านและเริ่มต้นข้อมูลจากไฟล์ก่อนที่จะดำเนินการใด ๆ หากฉันทำงานเกินขั้นตอนในการดีบักเกอร์ฉันต้องยุติโปรแกรมและเริ่มต้นใหม่ซึ่งต้องใช้เวลาพอสมควร

คำตอบ:


136

คุณสามารถใช้การดรอปลงในเฟรมของ Eclipseคำสั่งป้อนเมธอดปัจจุบันอีกครั้งจากด้านบน แต่จะไม่คลายการเปลี่ยนแปลงสถานะใด ๆ ที่เกิดขึ้นดังนั้นจึงอาจไม่ทำงานขึ้นอยู่กับประเภทของวิธีการที่คุณใช้

อีกหนึ่งเครื่องมือที่เย็นจริงๆที่จริงไม่ให้คุณย้อนกลับไปและไปข้างหน้าในเวลาเป็นดีบักเกอร์รอบรู้ ทำงานโดยใช้คลาสเครื่องมือเมื่อโหลดไว้ใน classloader ดังนั้นจึงสามารถบันทึกทุกอย่างที่โค้ดของคุณทำ มันสามารถทำสิ่งที่ยอดเยี่ยมมากเช่นคำตอบ "เมื่อใดที่ไหนและทำไมจึงกำหนดค่าปัจจุบันของฟิลด์นี้" UI นั้นค่อนข้างเกะกะและอาจมีปัญหาในการจัดการฐานรหัสขนาดใหญ่ แต่ในบางกรณีก็สามารถประหยัดเวลาได้มาก

อัปเดต : Chrononให้ผลิตภัณฑ์เชิงพาณิชย์ที่อธิบายว่าเป็น "DVR สำหรับ Java" ซึ่งดูเหมือนจะทำหลายอย่างเช่นเดียวกับ ODB


@Matt McHenry ฉันพยายามใช้ ODB1.5; ด้วยโปรแกรม java แบบสแตนด์อโลน แต่ฉันไม่แน่ใจว่าจะใช้งานได้อย่างไร? คุณมีรีซอร์สอื่นนอกเหนือจากไซต์ ODB ที่อธิบายขั้นตอนในการทำให้มันทำงานแบบสแตนด์อโลนและกับ Eclipse หรือไม่
Ayusman

@Ayusman: ไม่ฉันขอโทษฉันไม่มีอะไรจะแบ่งปันนอกเหนือจากสิ่งที่อยู่บนไซต์ ODB ฉันจะไม่แปลกใจถ้ามันใช้ไม่ได้กับรูปแบบไฟล์. class ที่ใหม่กว่าและอื่น ๆ :(
Matt McHenry

คำตอบที่น่าสนใจ!
KrishPrabakar

ปรากฏเว็บไซต์ Omnscient Debugger ได้รับการแบ่งโดเมน
Thorbjørn Ravn Andersen

45

นอกเหนือจากที่กล่าวไว้ในคำตอบก่อนหน้านี้นั่นคือคุณลักษณะ drop to frame ของ Eclipse ในมุมมองการดีบักซึ่งจะเริ่มการดีบักก่อนหน้านี้ในกรอบสแต็ก (แต่ไม่คืนค่าข้อมูลส่วนกลาง / แบบคงที่) และโปรแกรมดีบั๊ก Omniscientซึ่งค่อนข้างดิบและไม่มาก การพัฒนา - มีเครื่องมือที่ใช้ Eclipse สองสามตัวที่สามารถใช้เพื่อ "ย้อนกลับ" ในเวลา (รัน):

  • JIVE : Java Interactive Visualization Environment
  • Chronon : "เครื่องบันทึกข้อมูลการบิน" สำหรับโปรแกรม Java
  • Diver (ถูกยกเลิก) : มุมมองแบบโต้ตอบแบบไดนามิกสำหรับวิศวกรรมย้อนกลับ
  • จูบ : เฉพาะสำหรับ IntelliJ ตอนนี้ แต่การย้ายไปยัง Eclipse เป็นที่กล่าวถึงในแผนงาน

JIVE ขยาย Eclipse Java debugger ด้วยความสามารถในการบันทึกสถานะของโปรแกรม มุมมอง JIVE มีไดอะแกรม UML ที่เป็นประโยชน์ซึ่งได้รับการอัปเดตในขณะที่โปรแกรมกำลังทำงาน ไดอะแกรมเหล่านี้ให้ภาพรวมของสถานะของแอ็พพลิเคชัน (ออบเจ็กต์ไดอะแกรม) และการติดตามสแต็ก (แผนภาพลำดับ) คุณสามารถสืบค้นการติดตามที่จดจำไว้และย้อนเวลาและย้อนเวลาและดูไดอะแกรมที่เกี่ยวข้อง

Diver บันทึกเฉพาะการเรียกใช้เมธอดเท่านั้นและไม่ได้บันทึกสถานะของโปรแกรมเช่น JIVE เหตุการณ์การเรียกเมธอดทุกรายการจะถูกเก็บไว้เพื่อการเรียกค้นและวิเคราะห์ในภายหลัง ขยายการกำหนดค่า Java Run และ Debug เพื่อระบุตัวกรองเป็นหลัก การติดตามสามารถหยุดชั่วคราว / ดำเนินการต่อ / กรองได้ที่รันไทม์ เมื่อบันทึกแล้วมุมมองของนักดำน้ำสามารถแสดงในแผนภาพลำดับแบบโต้ตอบได้

JIVE และ Diver เป็นโครงการโอเพ่นซอร์สที่ออกจากงานวิจัยทางวิชาการ ณ เดือนพฤศจิกายน 2555 ทั้งสองโครงการกำลังดำเนินการอยู่

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

ปลั๊กอินทั้งหมดนี้ค่อนข้างโลภในทรัพยากรดังนั้นจึงควรมีเครื่อง spec ที่ดีและใช้คุณสมบัติตัวกรอง ข้อกำหนดที่ชัดเจนในการรันให้สำเร็จคือการขยายพื้นที่ฮีปใน eclipse.inieclipse.ini

ในกรณีของฉันฉันพยายามใช้ JIVE และ Diver เพื่อดีบักโปรแกรมแยกวิเคราะห์ XML แต่มักจะเกิดคราสค้างเนื่องจากไม่มีทรัพยากร นักดำน้ำอาจจะยุ่งยากในการทำงานบนลินุกซ์ 64bitก็ทำงานบน Ubuntu 32bit และอาจ distros 32bit อื่น ๆ โดยใช้เคล็ดลับเหล่านี้ นักประดาน้ำทำงานบน Windows, ยังดีกว่าใน Windows 64bit 64bit + JVM มิฉะนั้นคุณจะถูก จำกัด ให้ใช้พื้นที่กองสูงสุดของ 1.3-1.6Gb บน windows JIVE ใช้งานได้ดีบน linux 64bit ของฉันและดูเหมือนว่าจะทำงานได้ดีบนแพลตฟอร์มอื่น ๆ


นักดำน้ำถูกยกเลิก
ร่วม

12

ใช่ Eclipse CDT รองรับคุณลักษณะดีบักเกอร์ในอดีต

เปิดDebug การกำหนดค่า -> ดีบักเกอร์ -> เปิดใช้งานการย้อนกลับการแก้ไขข้อบกพร่องที่เริ่มต้น

กว่าที่คุณจะสามารถกดshift+F5หรือshift+F6เพื่อถอยหลังเช่นF5หรือF6ก้าวไปข้างหน้า


1
ตัวเลือกนี้มีอยู่ใน Eclipse ทุกเวอร์ชันหรือไม่ ฉันถูกหลอกถ้าฉันสามารถหามันได้ทุกที่
EngineerBetter_DJ

1
คุณลักษณะ GDB sourceware.org/gdb/wiki/ReverseDebugที่สนับสนุนใน Eclipse โดยbugs.eclipse.org/bugs/show_bug.cgi?id=258284คำขอนี้ ฉันคิดว่าคำตอบคือใช่ตั้งแต่ปี 2009
Sergei

สามารถเข้าถึงได้ใน CDT
Sergei

ฉันเป็นนักพัฒนา Java ดังนั้นฉันเดาว่า CDT จะไม่เป็นประโยชน์กับฉันมากนัก?
EngineerBetter_DJ

@Sergei ฉันกำลังทำสิ่งนี้ภายใต้ WIndows 7 SP1 พร้อมกับ Springsource เวอร์ชันเก่า ในการเปิดใช้งานการดีบักย้อนกลับก่อนอื่นคุณต้องดีบัก as-> Debug Configurations-> Main ที่ด้านล่างของหน้าคือตัวเรียกใช้กระบวนการ มันจะขึ้นว่า "Using Standard Create Process Launcher" และจะมีไฮเปอร์ลิงก์ไปที่ "Select other ... " คลิกที่นี่และตรวจสอบให้แน่ใจว่าได้เลือก "Use configuration specific settings" จากนั้นเลือก "GDB (GSF) Create Process Launcher" แล้วคลิกตกลง "การใช้ GDB (GSF) Create Process Launcher" จะแสดงที่ด้านล่างของแท็บหลัก
Sammy

5

ฉันลำเอียง แต่Chrononทำในสิ่งที่คุณกำลังมองหา

Drop to Frame ไม่ได้ย้อนกลับไปอย่างแน่นอนเนื่องจากหากเมธอดมีการเปลี่ยนแปลงอะไรในฮีปมันจะไม่ถูกเปลี่ยนกลับ


1
Chronon อนุญาตให้คุณทำแบบเรียลไทม์หรือไม่? ความเข้าใจของฉันคือก่อนอื่นคุณต้องบันทึกเซสชันโดยใช้ chronon จากนั้นคุณสามารถย้อนกลับไปในเซสชันนั้นได้ ไม่ดีเท่ากับการรีสตาร์ทแอปพลิเคชันหรือไม่? หรือบางทีฉันอาจจะขาดอะไรไป ..
Raam

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

Chronon ทำงานในสภาพแวดล้อม Docker หรือไม่ eclise ของฉันไม่ได้อยู่ในท้องถิ่น ..
ชอย

3

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


1

คำถามไม่ได้ระบุภาษา Eclipse และคำตอบหลายคำใช้ Java

หากใช้ C ++ และ GCC กับดีบักเกอร์ GDB Eclipse Run->Move to Lineจะทำงานและทำหน้าที่เหมือนกับ Visual Studio Set Next Statementงบชุดถัดไปในกรณีนี้ Eclipse กำลังใช้ความสามารถที่อยู่ใน GDB

หากใช้ Java ฉันไม่ทราบวิธีการใช้ Eclipse หรือ Netbeans แม้ว่าคำตอบอื่น ๆ จะแนะนำปลั๊กอิน Eclipse มีคำสั่ง "drop to frame" ซึ่งใช้ได้กับ Java ในเวอร์ชันของฉัน (Juno SR1) ถ้าฉันแก้ไขและบันทึกโค้ดภายในฟังก์ชันในโหมดดีบักบรรทัดการดำเนินการจะย้ายไปที่ด้านบนของฟังก์ชันปัจจุบันโดยอัตโนมัติและฉันสามารถดำเนินการต่อจากที่นั่นได้ ไม่เหมือนกับการระบุบรรทัด แต่เป็นสิ่งที่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.