JDB - ก้าว

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

คำสั่งต่อไปนี้ใช้ในขั้นตอนการก้าว:

  • ขั้นตอน: ขั้นตอนไปยังบรรทัดการดำเนินการถัดไป
  • รายการ: ตรวจสอบตำแหน่งที่คุณอยู่ในรหัส
  • ต่อ: ดำเนินการดำเนินการที่เหลือต่อไป

ตัวอย่าง

ตัวอย่างต่อไปนี้ใช้ Add class ที่เราเคยใช้ในบทก่อนหน้านี้:

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

บันทึกไฟล์ด้านบนเป็น Add.java คอมไพล์ไฟล์นี้โดยใช้คำสั่งต่อไปนี้:

\>javac Add.java

สมมติว่าเบรกพอยต์ถูกตั้งค่าบนเมธอด main () ของคลาส Add ขั้นตอนต่อไปนี้แสดงวิธีใช้ขั้นตอนในคลาสเพิ่ม

ขั้นตอนที่ 1: ดำเนินการงาน

คำสั่งต่อไปนี้เริ่มเรียกใช้คลาสที่ชื่อว่า Add

> run Add

หากคุณรันคำสั่งนี้คุณจะเห็นผลลัพธ์ต่อไปนี้ ในผลลัพธ์นี้คุณจะพบว่าการดำเนินการหยุดที่ตำแหน่งเบรกพอยต์เช่นที่เมธอด main ()

การดำเนินการหยุดที่บรรทัดแรกของเมธอดหลักนั่นคือที่ "int a = 5, b = 6;" หรือหมายเลขบรรทัด: 11 ในรหัส คุณสามารถสังเกตข้อมูลนี้ได้ในผลลัพธ์

ขั้นตอนที่ 2: ก้าวผ่านรหัส

คำสั่งต่อไปนี้ขั้นตอนการดำเนินการในบรรทัดถัดไป

main[1] step

ตอนนี้ขั้นตอนการดำเนินการไปยังหมายเลขบรรทัด: 12 คุณจะเห็นผลลัพธ์ต่อไปนี้

ขั้นตอนที่ 3: แสดงรหัส

คำสั่งต่อไปนี้แสดงรายการรหัส:

main[1] list

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

ขั้นตอนที่ 4: ดำเนินการต่อ

คำสั่งต่อไปนี้ดำเนินการโค้ดต่อไป:

main[1] cont

คำสั่งนี้ดำเนินการบรรทัดที่เหลือของโค้ดต่อไป ผลลัพธ์เป็นดังที่แสดงด้านล่าง:

> Add:11
The application exited
\>

โดยทั่วไปการก้าวมีสามประเภท:

  • ก้าวเข้าสู่
  • ก้าวข้าม
  • ก้าวออกมา

ก้าวเข้าสู่

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

ในรหัสต่อไปนี้เครื่องหมายลูกศรกำหนดตัวควบคุมในรหัส

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
   -> Add ob = new Add();
      
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

หากคุณใช้ไฟล์ step intoคำสั่งตัวควบคุมจะย้ายไปยังบรรทัดถัดไปนั่นคือ "int c = ob.addition (a, b);" ที่บรรทัดนี้มีการเรียกใช้ฟังก์ชันaddition(int, int) ด้วยเหตุนี้คอนโทรลเลอร์จึงเลื่อนไปที่บรรทัดบนสุดของฟังก์ชันการเพิ่มด้วยเครื่องหมายลูกศรดังที่แสดงด้านล่าง:

public class Add
{
   public int addition( int x, int y)
-> {
      int z = x + y;
      return z;
   }
      
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

ก้าวข้าม

Step Over ยังดำเนินการในบรรทัดถัดไป แต่ถ้าบรรทัดถัดไปเป็นการเรียกใช้ฟังก์ชันจะเรียกใช้ฟังก์ชันนั้นในพื้นหลังและส่งกลับผลลัพธ์

ให้เราเป็นตัวอย่าง ในรหัสต่อไปนี้เครื่องหมายลูกศรกำหนดตัวควบคุมในรหัส

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
   -> Add ob = new Add();
   
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

หากคุณใช้ไฟล์ step overคำสั่งตัวควบคุมจะย้ายไปยังบรรทัดถัดไปนั่นคือ "int c = ob.addition (a, b);" ในบรรทัดนี้มีการเรียกใช้ฟังก์ชันaddition(int, int) ดังนั้นการเรียกใช้ฟังก์ชันจะเสร็จสิ้นในพื้นหลังและผลลัพธ์จะถูกส่งกลับไปยังบรรทัดปัจจุบันโดยมีเครื่องหมายลูกศรดังที่แสดงด้านล่าง:

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
   -> int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

ก้าวออกมา

Step Out รันบรรทัดถัดไป หากบรรทัดถัดไปเป็นการเรียกใช้ฟังก์ชันจะข้ามไปและการเรียกใช้ฟังก์ชันจะดำเนินต่อไปพร้อมกับบรรทัดที่เหลือของโค้ด

ให้เราเป็นตัวอย่าง ในรหัสต่อไปนี้เครื่องหมายลูกศรกำหนดตัวควบคุมในรหัส

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
   -> Add ob = new Add();
   
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

หากคุณใช้ไฟล์ step outคำสั่งตัวควบคุมจะย้ายไปยังบรรทัดถัดไปนั่นคือ "int c = ob.addition (a, b);" ในบรรทัดนี้มีการเรียกใช้ฟังก์ชันaddition(int, int) ดังนั้นการเรียกใช้ฟังก์ชันจะถูกข้ามไปและการดำเนินการที่เหลือจะดำเนินต่อไปโดยมีเครื่องหมายลูกศรดังที่แสดงด้านล่าง:

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
   -> int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}