ข้อแตกต่างระหว่าง Step Into และ Step Over ในดีบักเกอร์ Eclipse คืออะไร?


194

ฉันต้องการดีบักการไหลทั้งหมดของโปรแกรม Java อะไรคือความแตกต่างระหว่างF5(ก้าวเข้าสู่) และF6(ก้าวข้าม) ใน eclipse?


FWIW ตรรกะเดียวกันของการก้าวข้าม / ก้าวนำไปใช้กับ Xcode / Swift
ฮันนี่

คำตอบ:


270

พิจารณาโค้ดต่อไปนี้พร้อมกับตัวชี้คำสั่งปัจจุบันของคุณ (บรรทัดที่จะถูกดำเนินการถัดไประบุโดย->) ที่f(x)บรรทัดg()นั้นโดยเรียกว่าg(2)บรรทัดในmain():

public class testprog {
    static void f (int x) {
        System.out.println ("num is " + (x+0)); // <- STEP INTO
    }

    static void g (int x) {
->      f(x); //
        f(1); // <----------------------------------- STEP OVER
    }

    public static void main (String args[]) {
        g(2);
        g(3); // <----------------------------------- STEP OUT OF
    }
}

หากคุณก้าวเข้าสู่จุดนั้นคุณจะย้ายไปที่println()บรรทัดในf()โดยเข้าสู่การเรียกใช้ฟังก์ชัน

หากคุณต้องก้าวข้ามไปที่จุดนั้นคุณจะย้ายไปยังf(1)บรรทัดที่อยู่ข้างหน้าg()และก้าวข้ามการเรียกใช้ฟังก์ชัน

คุณสมบัติที่มีประโยชน์อีกประการของโปรแกรมดีบั๊กคือขั้นตอนออกหรือย้อนกลับขั้นตอน ในกรณีนั้นการย้อนกลับแบบขั้นตอนจะนำคุณผ่านฟังก์ชั่นปัจจุบันจนกระทั่งคุณย้อนกลับไปหนึ่งระดับ ในคำอื่น ๆ ก็จะก้าวผ่านf(x)และf(1)แล้วกลับออกไปยังฟังก์ชั่นการโทรไปจบลงที่ในg(3)main()

Eclipse (อย่างน้อย Europa ซึ่งเป็นเพียงคนเดียวที่ฉันมีประโยชน์ในขณะนี้) ใช้F5สำหรับstep into, F6สำหรับstep overและสำหรับF7step return


1
"จากนั้นกลับสู่ฟังก์ชั่นการโทรเพื่อสิ้นสุดที่g(3)ในmain()" <-คุณคิดว่าคุณได้รับตำแหน่งปัจจุบันของคุณจากg(2)เมื่อคุณเสร็จแล้วคุณจะกลับไปที่บรรทัดถัดไปg(3)หรือไม่
ฮันนี่

1
@ ฮันนี่ใช่มีความคลุมเครือบางอย่างอยู่ที่นั่น (ไม่ว่าจะโทรg(2)หรือg(3)กำลังเปิดใช้งานอยู่) ดังนั้นฉันจึงได้ลบมันในย่อหน้าแรก ขอบคุณสำหรับหัวขึ้น.
paxdiablo

144

เมื่อทำการดีบักบรรทัดของรหัสนี่คือสถานการณ์ปกติ:

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

Eclipse มีคุณสมบัติการดีบักขั้นสูงอื่น ๆ แต่สิ่งเหล่านี้เป็นพื้นฐานขั้นพื้นฐาน

ดูสิ่งนี้ด้วย


22

ขั้นตอนในจะขุดเป็นวิธีการโทร
ขั้นตอนมากกว่าจะดำเนินการบรรทัดและไปที่ถัดไป


1
แล้ว "ก้าวออกไป"
Koray Tugay

5

คุณไม่สามารถอ่านรายละเอียดของวิธีการได้โดยใช้ขั้นตอน หากคุณต้องการข้ามบรรทัดปัจจุบันคุณสามารถใช้ขั้นตอนที่ผ่านมาได้จากนั้นคุณเพียงกดปุ่มF6หนึ่งครั้งเพื่อเลื่อนไปยังบรรทัดถัดไป และถ้าคุณคิดว่ามีบางสิ่งผิดปกติในวิธีการนั้นให้ใช้F5เพื่อตรวจสอบรายละเอียด


ดังนั้นถ้าฉันทำตามขั้นตอนและถ้าฟังก์ชั่นมีคำสั่งพิมพ์จะพิมพ์เกิดขึ้นหรือไม่?
ชื่อผู้ใช้

2

Step Intoนิพจน์ถัดไปของบรรทัดที่เลือกในปัจจุบันที่จะดำเนินการถูกเรียกใช้และการดำเนินการจะหยุดชั่วคราวที่บรรทัดที่สามารถใช้งานได้ถัดไปในวิธีที่เรียกใช้

Step Over บรรทัดที่เลือกในปัจจุบันจะถูกดำเนินการและหยุดชั่วคราวในบรรทัดที่สามารถเรียกทำงานต่อไปได้

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