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);
}
}