JDB - Hướng dẫn nhanh

Gỡ lỗi là một quy trình kỹ thuật để tìm và loại bỏ các lỗi hoặc khiếm khuyết trong một chương trình và thu được kết quả mong đợi. Gỡ lỗi bao gồm kiểm tra và giám sát. Nó rất phức tạp khi các đơn vị con của một chương trình được kết hợp chặt chẽ với nhau. Chúng tôi có thể gỡ lỗi một chương trình bằng cách sử dụng các công cụ gỡ lỗi tuân theo các API được chỉ định. Trình gỡ lỗi cho phép bạn xem qua mọi khía cạnh của mã, kiểm tra tất cả các phần tử và xóa lỗi, nếu có.

Kỹ thuật gỡ lỗi

Có nhiều loại kỹ thuật khác nhau để gỡ lỗi một chương trình Java. Phương pháp gỡ lỗi cũ là sử dụng các câu lệnh in ở cuối mỗi đoạn sẽ in các câu lệnh theo dõi trên bảng điều khiển. Hãy xem đoạn mã sau.

pubic class Add
{
   public static void main(String ar[])
   {
      int a=ar[0];
      system.out.println("A : " +a);
      int b=ar[1];
      system.out.println("B : " +b);
      int c = a + b;
      system.out.println("C = a + b : " +c);
   }
}

Ở đây, chúng ta có một chương trình thêm hai số và in ra kết quả. Lưu ý rằng ở mỗi bước, chúng tôi đã giới thiệu một câu lệnh in để in trạng thái của chương trình trên bàn điều khiển. Đây là cách tiếp cận truyền thống để gỡ lỗi một chương trình.

Ngoài ra, chúng tôi có các khái niệm nâng cao có thể được sử dụng để gỡ lỗi một chương trình như:

  • stepping
  • điểm ngắt và
  • ngoại lệ hoặc các điểm theo dõi.

Các loại gỡ lỗi

Chúng tôi có thể gỡ lỗi chương trình bằng nhiều phương pháp khác nhau:

  • Sử dụng Java bytecode (phiên bản đã biên dịch của mã Java)
  • Sử dụng nhận xét bên trong chương trình
  • Gắn lớp vào một chương trình đang chạy
  • Gỡ lỗi từ xa
  • Gỡ lỗi theo yêu cầu
  • Gỡ lỗi mã được tối ưu hóa

Trình gỡ lỗi Java

Dưới đây là một số ví dụ về trình gỡ lỗi Java hiện có trên thị trường:

  • Các IDE như Eclipse, Netbeans, v.v. chứa các trình gỡ lỗi của riêng chúng (Visual cafe, Borland, JBuilder)
  • GUI trình gỡ lỗi độc lập (chẳng hạn như Jikes, trình gỡ lỗi nền tảng Java và JProbe)
  • Trình gỡ lỗi dòng lệnh (Sun's JDB)
  • Notepad hoặc VI điều khiển (theo dõi ngăn xếp)

Hướng dẫn này trình bày cách sử dụng trình gỡ lỗi dòng lệnh, jdb.

JDB

Trình gỡ lỗi Java (JDB) là một công cụ dành cho các lớp Java để gỡ lỗi một chương trình trong dòng lệnh. Nó thực hiện Kiến trúc trình gỡ lỗi nền tảng Java. Nó giúp phát hiện và sửa lỗi trong chương trình Java sử dụng Giao diện gỡ lỗi Java (JDI).

JDB trong JDK

Kiến trúc sau đây xác định vai trò của JDB trong JDK. Nó chủ yếu chứa ba đơn vị:

  • Giao diện công cụ máy ảo Java (JVM TI)
  • Nhóm nối dây gỡ lỗi Java (JDWP)
  • Giao diện trình gỡ lỗi Java (JDI)

JVM TI

Nó là một giao diện lập trình gốc được thực hiện bởi VM. Nó cung cấp các cách để kiểm tra và gỡ lỗi trạng thái của ứng dụng đang chạy trên máy ảo. Nó cho phép một trình triển khai (VM Triển khai) có thể được bao bọc dễ dàng vào kiến ​​trúc gỡ lỗi. Nó cũng sử dụng kênh của bên thứ ba có tênJDWP để giao tiếp.

JDWP

Nó xác định định dạng của thông tin và các yêu cầu chuyển vào giữa quá trình gỡ lỗi và giao diện người dùng của trình gỡ lỗi. Mục đích chính của việc có JDWP là cho phép trình gỡ lỗi và trình gỡ lỗi giao tiếp khi chúng chạy trong các máy ảo riêng biệt hoặc trong các nền tảng riêng biệt.

JDI

Nó là một giao diện Java cấp cao được triển khai dưới dạng giao diện người dùng. Nó xác định thông tin biến ở cấp mã người dùng. Bạn nên sử dụng lớp JDI cho tất cả quá trình phát triển trình gỡ lỗi. Nó sử dụng JDWP để giao tiếp với trình gỡ lỗi JVM.

Chương này giải thích cách cài đặt JDB trên các hệ thống chạy Windows và Linux. JDB là một phần của JDK. Do đó, cài đặt JDK là đủ để sử dụng JDB trong dấu nhắc lệnh.

yêu cầu hệ thống

Dưới đây là các yêu cầu hệ thống để cài đặt JDB:

JDK Java SE 2 JDK 1.5 trở lên
Ký ức RAM 1 GB (khuyến nghị)
Dung lượng đĩa Không có yêu cầu tối thiểu
Phiên bản hệ điều hành Windows XP trở lên, Linux

Làm theo các bước đơn giản dưới đây để cài đặt JDB trên hệ thống của bạn.

Bước 1: Xác minh cài đặt Java

Trước hết, bạn cần cài đặt Bộ phát triển phần mềm Java (SDK) trên hệ thống của mình. Để xác minh điều này, hãy thực hiện bất kỳ lệnh nào trong hai lệnh tùy thuộc vào nền tảng bạn đang làm việc.

Nếu cài đặt Java đã được thực hiện đúng cách, thì nó sẽ hiển thị phiên bản hiện tại và thông số kỹ thuật của cài đặt Java. Đầu ra mẫu được đưa ra trong bảng sau.

Nền tảng Chỉ huy Đầu ra mẫu
các cửa sổ

Mở bảng điều khiển lệnh và nhập:

\>java –version

Phiên bản Java "1.7.0_60"

Môi trường thời gian chạy Java (TM) SE (bản dựng 1.7.0_60-b19)

Java Hotspot (TM) 64-bit Server VM (bản dựng 24.60-b09, chế độ hỗn hợp)

Linux

Mở đầu cuối lệnh và nhập:

$java –version

phiên bản java "1.7.0_25"

Mở môi trường thời gian chạy JDK (rhel-2.3.10.4.el6_4-x86_64)

Mở JDK 64-Bit Server VM (bản dựng 23.7-b01, chế độ hỗn hợp)

Chúng tôi giả định rằng người đọc của hướng dẫn này đã cài đặt Java SDK phiên bản 1.7.0_60 trên hệ thống của họ. Trong trường hợp bạn không có Java SDK, hãy tải xuống phiên bản hiện tại của nó từ liên kếthttp://www.oracle.com/technetwork/java/javase/downloads/index.html và cài đặt nó.

Bước 2: Thiết lập môi trường Java

Đặt biến môi trường JAVA_HOME trỏ đến vị trí thư mục cơ sở nơi Java được cài đặt trên máy của bạn. Ví dụ,

Nền tảng Sự miêu tả
các cửa sổ đặt JAVA_HOME thành C: \ ProgramFiles \ java \ jdk1.7.0_60
Linux xuất JAVA_HOME = / usr / local / java

Nối đường dẫn đầy đủ của vị trí trình biên dịch Java vào Đường dẫn hệ thống.

Nền tảng Sự miêu tả
các cửa sổ Nối chuỗi "C: \ Program Files \ Java \ jdk1.7.0_60 \ bin" vào cuối biến hệ thống PATH.
Linux xuất PATH = $ PATH: $ JAVA_HOME / bin /

Thực hiện lệnh java -version từ dấu nhắc lệnh như đã giải thích ở trên.

Bước 3: Xác minh cài đặt JDB

Xác minh phiên bản JDB như sau:

Nền tảng Chỉ huy Đầu ra mẫu
các cửa sổ

Mở bảng điều khiển lệnh và nhập:

\>jdb –version

Đây là JDB phiên bản 1.6 (Java SE phiên bản 1.7.0_60)
Linux

Mở đầu cuối lệnh và nhập:

$jdb –version

Đây là JDB phiên bản 1.6 (Java SE phiên bản 1.7.0_60)

Chương này giải thích cú pháp của lệnh JDB. Cú pháp bao gồm bốn phần được liệt kê như sau:

  • JDB
  • option
  • class
  • arguments

Cú pháp

Cú pháp của JDB như sau.

jdb [ options ] [ class ] [ arguments ]

JDB

Nó gọi jdb.exe từ Bộ phát triển Java.

Tùy chọn

Chúng bao gồm các tùy chọn dòng lệnh được sử dụng để gỡ lỗi chương trình Java một cách hiệu quả. Trình khởi chạy JDB chấp nhận tất cả các tùy chọn (chẳng hạn như -D, -classpath và -X) và một số tùy chọn nâng cao bổ sung như (-attach, -listen, -launch, v.v.).

Lớp học

Nó là tên lớp mà bạn muốn thực hiện các thao tác gỡ lỗi.

Tranh luận

Đây là các giá trị đầu vào được cung cấp cho một chương trình trong thời gian chạy. Ví dụ, arg [0], arg [1] cho phương thức main ().

Trong bốn phân đoạn trên, quyền chọn là phân đoạn quan trọng nhất.

Chương này mô tả các tùy chọn quan trọng có sẵn trong JDB được gửi dưới dạng đối số với lệnh jdb.

Tùy chọn

Bảng sau đây chứa danh sách các tùy chọn được JDB chấp nhận:

Tên Sự miêu tả
-Cứu giúp Hiển thị thông báo trợ giúp và liệt kê các tùy chọn liên quan.
-sourcepath Sử dụng đường dẫn đã cho cho các tệp nguồn nếu đường dẫn không được chỉ định, thì đường dẫn này sẽ lấy đường dẫn mặc định “.”, Tức là thư mục hiện tại.
-gắn Đính kèm trình gỡ lỗi vào máy ảo đang chạy bằng cách chỉ định địa chỉ máy ảo đang chạy.
-nghe Chờ máy ảo đang chạy kết nối bằng trình kết nối tiêu chuẩn.
-listenany Chờ máy ảo đang chạy kết nối bằng bất kỳ địa chỉ nào.
-phóng Khởi chạy ứng dụng đã gỡ lỗi ngay lập tức khi khởi động.
-listconnectors Liệt kê các đầu nối có sẵn trong máy ảo này.
-kết nối Kết nối với máy ảo đích bằng trình kết nối được đặt tên với các giá trị đối số được liệt kê.
-dbgtrace In thông tin để gỡ lỗi jdb.
-tclient Chạy ứng dụng trong Java Hotspot VM (máy khách).
-tserver Chạy ứng dụng trong Java Hotspot VM (máy chủ).
-Joption Chuyển tùy chọn đến máy ảo Java được sử dụng để chạy JDB.

Sử dụng các tùy chọn với các lệnh

Các lệnh sau cho biết cách sử dụng một số tùy chọn ở trên:

-Cứu giúp

Lệnh sau được -help khi sử dụng JDB.

\>jdb -help

-gắn

Lệnh sau đính kèm trình gỡ lỗi vào một máy ảo được chỉ định (số cổng: 1099).

\> jdb -attach 1099

-nghe

Lệnh sau làm cho tiến trình JDB chạy trên máy ảo hiện tại chờ bằng cách sử dụng trình kết nối tiêu chuẩn (VM in 8008).

\>jdb -listen 8088

-listenany

Lệnh sau làm cho tiến trình JDB đang chạy trên máy ảo hiện tại phải chờ bằng cách sử dụng bất kỳ trình kết nối nào (máy ảo trong cổng hiện đang chạy).

\>jdb –listenany

-tclient

Lệnh sau đây thực thi ứng dụng trong Java Hotspot (™) VM (máy khách).

\>jdb –tclient

-tserver

Lệnh sau đây thực thi ứng dụng trong Java Hotspot (™) VM (máy chủ).

\>jdb -tserver

Chương này mô tả cách bắt đầu một phiên JDB theo những cách khác nhau. Khởi chạy JDB là kỹ thuật thường được sử dụng để bắt đầu một phiên JDB.

Có hai cách khác nhau để bắt đầu một phiên JDB:

  • Bắt đầu phiên JDB bằng cách thêm lớp (tên lớp chính) vào nó.
  • Thêm JDB để chạy JVM để bắt đầu phiên.

Bắt đầu phiên bằng cách thêm lớp

Lệnh sau bắt đầu một phiên JDB:

Cú pháp

\>jdb <classname>

Thí dụ

Giả sử chúng ta có một lớp có tên TestClass. Lệnh sau đây bắt đầu một phiên JDB từ TestClass.

\>jdb TestClass

Nếu bạn làm theo lệnh này, nó sẽ khởi động một máy ảo Java mới với bất kỳ tham số được chỉ định nào. Sau đó, nó tải lớp và dừng nó trước khi thực hiện câu lệnh đầu tiên của lớp.

Bắt đầu một phiên bằng cách thêm JDB vào một JVM đang chạy

Dưới đây là cú pháp và ví dụ để bắt đầu một phiên JDB bằng cách thêm JDB vào một JVM đang chạy.

Cú pháp

Cú pháp sau dành cho phiên JDB:

-agentlib:jdwp=transport=dt_shmem,address=
      
       ,server=y,suspend=n 
      

Thí dụ

Giả sử tên lớp chính là TestClassvà JVM cho phép JDB kết nối nó sau này. Sau đây là lệnh thêm JDB vào JVM:

\>java
-agentlib:jdwp=transport=dt_shmem,address=jdbconn,server=y,suspend=n TestClass

Bây giờ bạn có thể đính kèm JDB vào JVM bằng lệnh sau:

\> jdb -attach jdbconn

Note: Đây, TestClass không được thêm vào lệnh JDB, vì JDB được kết nối với máy ảo đang chạy thay vì khởi chạy một máy ảo mới.

Chương này sẽ đưa bạn qua các lệnh cơ bản của JDB. Sau khi khởi chạy một phiên, các lệnh này được sử dụng để gỡ lỗi một chương trình.

Sau đây là danh sách các lệnh được sử dụng để gỡ lỗi.

Tên Sự miêu tả
giúp đỡ hoặc? Điều quan trọng nhất JDBchỉ huy; nó hiển thị một danh sách các lệnh được công nhận với một mô tả ngắn gọn.
chạy Sau khi bắt đầu JDB và thiết lập các điểm ngắt cần thiết, bạn có thể sử dụng lệnh này để bắt đầu thực thi và gỡ lỗi một ứng dụng.
tiếp Tiếp tục thực thi ứng dụng đã gỡ lỗi sau một điểm ngắt, ngoại lệ hoặc bước.
in Hiển thị các đối tượng Java và các giá trị nguyên thủy.
đổ Đối với các giá trị nguyên thủy, lệnh này giống hệt lệnh print. Đối với các đối tượng, nó in ra giá trị hiện tại của mỗi trường được xác định trong đối tượng. Các trường tĩnh và trường thể hiện được bao gồm.
chủ đề Liệt kê các chủ đề hiện đang chạy.
sợi chỉ Chọn một chủ đề làm chủ đề hiện tại.
Ở đâu Kết xuất ngăn xếp của luồng hiện tại.

Thí dụ

Giả sử chúng ta có một lớp mẫu được gọi là Add cho các ví dụ sau:

Add.java

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

Biên dịch lớp Add.java này bằng lệnh sau:

\>javac Add.java

Chạy

Lệnh này thực thi tệp lớp chính, tệp này được thêm vào JDB để gỡ lỗi. Thực thi các lệnh sau để chạy lớp Thêm.

\>jdb Add
initializing jdb …
>run

Khi thực hiện các lệnh này, bạn sẽ thấy kết quả sau:

Chương này giải thích khái niệm về các điểm ngắt và cách thiết lập các điểm ngắt trong chương trình. Điểm ngắt giới thiệu một điểm dừng hoặc tạm dừng rõ ràng trong việc thực thi chương trình tại một dòng mã cụ thể trong khi gỡ lỗi. Sẽ rất hữu ích khi có được kiến ​​thức về các biến trong chương trình khi thực thi nó.

Cú pháp

Lệnh sau thiết lập một điểm ngắt tại một số dòng cụ thể:

> stop at <class name>:<Line no>

Lệnh sau thiết lập một điểm ngắt trên một phương thức cụ thể hoặc trên một biến cụ thể:

> stop in <class name>:< Method name | Variable name>

Thí dụ

Ví dụ sau đây cho thấy cách thiết lập một điểm ngắt trong một lớp.

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

Gỡ lỗi

Hãy để chúng tôi lấy một ví dụ để gỡ lỗi. Ở đây, chúng tôi bắt đầu quá trình gỡ lỗi bằng cách thiết lập một điểm ngắt trên main (). Dưới đây là các bước cần thực hiện trong quy trình gỡ lỗi:

Bước 1: Bắt đầu phiên JDB

Lệnh sau bắt đầu một phiên JDB trên lớp Thêm để gỡ lỗi:

\> jdb Add

Bước 2: Đặt điểm ngắt

Lệnh sau đây thiết lập một điểm ngắt trên phương thức main () của lớp Thêm.

> stop in Add.main

Nếu điểm ngắt được đặt thành công, bạn sẽ thấy kết quả sau:

Deferring breakpoint Add.main.
It will set after the class is loaded.
>

Bước 3: Bắt đầu gỡ lỗi

Lệnh sau bắt đầu thực thi lớp Thêm:

> run Add

Nếu bạn chạy lệnh này, bạn sẽ thấy kết quả sau. Trong đầu ra này, bạn thấy rằng việc thực thi dừng lại ở vị trí điểm ngắt, tức là ở hàm 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 4: Tiếp tục thực hiện

Lệnh sau tiếp tục thực hiện chương trình:

cont

Nó cung cấp cho bạn phần thực thi còn lại và kết quả như sau:

> Add:11
The application exited
\>

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

Chương này giải thích cách xử lý lớp ngoại lệ bằng JDB. Nói chung, bất cứ khi nào một chương trình đưa ra một ngoại lệ mà không có câu lệnh bắt, thì VM sẽ in ra dòng ngoại lệ, nguyên nhân của ngoại lệ và thoát. Nếu ngoại lệ đã được nêu ra với câu lệnh catch, thì ngoại lệ sẽ được xử lý bởi câu lệnh catch. Ở đây, VM in kết quả ra với nguyên nhân là ngoại lệ.

Khi lớp tạo ra ngoại lệ đang chạy trong JDB, nó cũng ném uncaughtngoại lệ. Ngoại lệ đó có thể được xử lý bằng cách sử dụngcatch chỉ huy.

Thí dụ

Hãy để chúng tôi lấy một ví dụ về lớp JdbException:

public class JdbException
{
   public static void main(String ar[]) throws Exception
   {
      int a=8, b=0;
      System.out.println("Welcome");
      System.out.println("Ex: "+(a/b));
   }
}

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

\>javac JdbException.java

Làm theo các bước dưới đây để xử lý ngoại lệ.

Bước 1: Chạy lớp

Lệnh sau thực thi lớp có tên JdbException như sau:

\>jdb JdbException
>run

Điều này JdbException lớp chứa một ngoại lệ, do đó bạn sẽ thấy kết quả sau:

Bước 2: Nắm bắt ngoại lệ

Lệnh sau bắt ngoại lệ:

mian[1] catch java.lang.ArithmeticException

Nó sẽ cung cấp cho bạn kết quả sau:

Set all java.lang.ArithmeticException

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

Lệnh sau tiếp tục thực hiện. Bây giờ hàm xử lý ngoại lệ số học như sau:

Chương này giải thích cách sử dụng JDB trong Eclipse. Trước khi tiếp tục, bạn cần cài đặt Eclipse Indigo. Làm theo các bước dưới đây để cài đặt Eclipse Indigo trên hệ thống của bạn.

Bước 1: Tải xuống và cài đặt Eclipse

Bạn có thể tải xuống Eclipse từ liên kết sau: http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/indigosr2

Bước 2: Tạo một dự án mới và một lớp học mới

  • Tạo một dự án Java mới bằng cách làm theo các tùy chọn File-> New -> Java project.
  • Đặt tên nó là “sampledebug”.
  • Tạo một lớp mới bằng cách nhấp chuột phải vào samplebebug dự án.
  • Lựa chọn options ->new -> class
  • Đặt tên nó là “Add.java”

Add.java

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 3: Mở Phối cảnh gỡ lỗi

Làm theo hướng dẫn dưới đây để mở phối cảnh gỡ lỗi.

Trên IDE Eclipse, đi tới Window -> Open perspective -> Debug. Bây giờ bạn sẽ có được phối cảnh gỡ lỗi cho chương trình Add.java. Bạn sẽ thấy cửa sổ sau.

Các phần trong Phối cảnh gỡ lỗi

Các phần trong phối cảnh Gỡ lỗi như sau:

Phần mã hóa

Mã Java được hiển thị trong phần này. Đó là mã bạn muốn gỡ lỗi, tức làAdd.java. Ở đây chúng ta có thể thêm một điểm ngắt trên một dòng bằng cách nhấp đúp vào phía trước dòng. Bạn tìm bong bóng màu xanh có biểu tượng mũi tên để chỉ ra điểm ngắt của đoạn thẳng đó. Xem ảnh chụp màn hình sau; bạn có thể tìm thấy khu vực đã chọn với một vòng tròn màu đỏ được chỉ là “1”.

  1. Nhấp đúp vào đây. Bạn có thể đặt điểm ngắt cho dòng này.

Phần điểm ngắt

Phần này xác định danh sách các điểm ngắt được đặt thành mã chương trình. Tại đây chúng ta có thể thêm, xóa, tìm và quản lý các điểm ngắt. Ảnh chụp màn hình sau đây cho thấy phần breakpoint.

Quan sát các tùy chọn sau trong ảnh chụp màn hình đã cho:

  1. Sử dụng hộp kiểm ở bên trái, chúng ta có thể chọn hoặc bỏ chọn một điểm ngắt. Ở đây, chúng tôi sử dụng một điểm ngắt, tức là Thêm phương thức class-main ().

  2. Biểu tượng chữ thập đơn “X” được sử dụng để xóa điểm ngắt đã chọn.

  3. Biểu tượng dấu chéo kép “XX” được sử dụng để xóa tất cả các điểm ngắt trong mã của bạn.

  4. Con trỏ mũi tên được sử dụng để trỏ đến mã mà điểm ngắt đã chọn được áp dụng.

Các chức năng còn lại trong phần breakpoint như sau:

  • Hitcount: Nó cho biết số lần điều khiển chạm vào điểm ngắt này. Nó được sử dụng cho logic đệ quy.

  • Suspend thread : Chúng tôi có thể tạm dừng luồng hiện tại bằng cách chọn nó.

  • Suspend VM : Chúng tôi có thể tạm ngừng VM bằng cách chọn nó.

Phần gỡ lỗi

Phần này được sử dụng cho quá trình gỡ lỗi. Nó chứa các tùy chọn được sử dụng để gỡ lỗi.

Start debugging : Làm theo hướng dẫn dưới đây để bắt đầu gỡ lỗi.

Nhấp chuột phải vào code -> nhấp chuột Debug as -> nhấp chuột 1 Java application.

Quá trình gỡ lỗi bắt đầu như thể hiện trong ảnh chụp màn hình sau. Nó chứa một số tùy chọn đã chọn, được đánh dấu bằng chữ số.

  1. Chúng tôi áp dụng một điểm ngắt trên phương thức Thêm lớp main (). Khi chúng tôi bắt đầu gỡ lỗi,controller bị kẹt ở dòng đầu tiên của phương thức main ().

  2. Nó được sử dụng để Resumequá trình gỡ lỗi và bỏ qua điểm ngắt hiện tại. Nó hoạt động tương tự nhưcont trong dòng lệnh JDB.

  3. Nó được sử dụng để dừng quá trình gỡ lỗi.

  4. Nó hoạt động tương tự như step introng dòng lệnh JDB. Nó được sử dụng để di chuyển điều khiển sang dòng tiếp theo, tức là điểm “1” di chuyển sang dòng tiếp theo.

  5. Nó hoạt động tương tự như step over trong dòng lệnh JDB.

  6. Nó được sử dụng để xem điểm ngắt được áp dụng trên dòng nào.

Làm theo các bước và phần đã cho để gỡ lỗi mã của bạn trong IDE eclipse. Theo mặc định, mọi IDE đều chứa quy trình gỡ lỗi này.