JDB - Bước

Chương này giải thích cách sử dụng khái niệm Bước trong gỡ lỗi chương trình. Bước là tính năng gỡ lỗi cho phép bạn thực thi mã bằng cách từng dòng một. Sử dụng điều này, bạn có thể kiểm tra từng dòng mã để đảm bảo chúng đang hoạt động như dự định.

Các lệnh sau được sử dụng trong quá trình bước:

  • step: các bước đến dòng thực thi tiếp theo
  • list: kiểm tra xem bạn đang ở đâu trong mã
  • tiếp tục thực hiện còn lại

Thí dụ

Ví dụ sau sử dụng lớp Thêm mà chúng ta đã sử dụng trong chương trước:

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

Lưu tệp trên với tên Add.java. Biên dịch tệp này bằng lệnh sau:

\>javac Add.java

Giả sử rằng breakpoint được đặt trên phương thức main () của lớp Add. Các bước sau đây cho biết cách áp dụng bước trong lớp Thêm.

Bước 1: Thực hiện công việc

Lệnh sau đây bắt đầu thực thi lớp có tên Thêm.

> run Add

Nếu bạn thực hiện lệnh này, bạn sẽ thấy kết quả sau. Trong đầu ra này, bạn có thể thấy rằng việc thực thi dừng lại ở vị trí điểm ngắt, tức là ở phương thức main ().

Việc thực thi dừng lại ở dòng đầu tiên của phương thức chính, đó là "int a = 5, b = 6;" hoặc Dòng số: 11 trong mã. Bạn có thể quan sát thông tin này trong đầu ra.

Bước 2: Bước qua Mã

Lệnh sau chuyển bước thực hiện đến dòng tiếp theo.

main[1] step

Bây giờ các bước thực hiện đến Dòng số: 12. Bạn sẽ thấy kết quả sau.

Bước 3: Liệt kê mã

Lệnh sau liệt kê mã:

main[1] list

Bạn nhận được kết quả sau. Lệnh danh sách được sử dụng để cho bạn biết dòng trong mã mà điều khiển chương trình đã đạt tới. Chú ý dấu mũi tên => trong ảnh chụp màn hình sau đây hiển thị vị trí hiện tại của điều khiển chương trình.

Bước 4: Tiếp tục thực hiện

Lệnh sau tiếp tục thực thi mã:

main[1] cont

Lệnh này tiếp tục thực hiện các dòng còn lại của mã. Đầu ra như hình dưới đây:

> Add:11
The application exited
\>

Nói chung, có ba loại bước:

  • Bước vào
  • Bước qua
  • Bước ra khỏi

Bước vào

Sử dụng lệnh này, bạn có thể chuyển sang dòng tiếp theo của mã. Nếu dòng tiếp theo của mã là một lệnh gọi hàm, thì nó sẽ nhập hàm bằng cách điều khiển điều khiển ở dòng trên cùng của hàm.

Trong đoạn mã sau, dấu mũi tên xác định bộ điều khiển trong mã.

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

Nếu bạn sử dụng step intolệnh, bộ điều khiển di chuyển đến dòng tiếp theo, tức là, "int c = ob.addition (a, b);". Tại dòng này, có một lệnh gọi hàmaddition(int, int) do đó bộ điều khiển di chuyển đến dòng trên cùng của hàm bổ sung với dấu mũi tên như hình dưới đây:

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

Bước qua

Step Over cũng thực hiện dòng tiếp theo. Nhưng nếu dòng tiếp theo là một lệnh gọi hàm, nó sẽ thực thi hàm đó trong nền và trả về kết quả.

Chúng ta hãy lấy một ví dụ. Trong đoạn mã sau, dấu mũi tên xác định điều khiển trong mã.

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

Nếu bạn sử dụng step overlệnh, điều khiển chuyển sang dòng tiếp theo, tức là, "int c = ob.addition (a, b);". Trong dòng này, có một lệnh gọi hàmaddition(int, int) do đó việc thực thi hàm được thực hiện ở chế độ nền và kết quả được trả về dòng hiện tại với dấu mũi tên như hình dưới đây:

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

Bước ra khỏi

Bước ra thực hiện dòng tiếp theo. Nếu dòng tiếp theo là một lệnh gọi hàm, nó sẽ bỏ qua điều đó và việc thực thi hàm tiếp tục với các dòng còn lại của mã.

Chúng ta hãy lấy một ví dụ. Trong đoạn mã sau, dấu mũi tên xác định bộ điều khiển trong mã.

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

Nếu bạn sử dụng step outlệnh, bộ điều khiển di chuyển đến dòng tiếp theo, tức là, "int c = ob.addition (a, b);". Trong dòng này, có một lệnh gọi hàmaddition(int, int) do đó thực thi chức năng bị bỏ qua và thực thi còn lại tiếp tục với dấu mũi tên như hình dưới đây:

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