<![CDATA[Latest posts for the topic "Rắc rối với jdb - The java debugger "]]> /hvaonline/posts/list/23.html JForum - http://www.jforum.net Rắc rối với jdb - The java debugger Code:
public class TestMe {

    private int int_value;
    private String string_value;

    public static void main(String[] args) {
        TestMe testMe = new TestMe();
        testMe.setInt_value(1);
        testMe.setString_value("test");
        String toString = testMe.toString();
	System.out.println(toString);
    }

    public TestMe() {
    }

    public void setInt_value(int value) {
        int_value = value;
    }

    public void setString_value(String value) {
        string_value = value;
    }

    @Override
    public String toString() {
        return "String value: " + string_value + " int value: " + int_value;
    }
}
File TestMe.java mình save tại I:\TestingZone Mình thực hiện debug mã nguồn trên bằng jdb. Đây là hình ảnh trong command prompt của mình: Code:
I:\TestingZone>javac -g TestMe.java

I:\TestingZone>jdb TestMe
Initializing jdb ...
> run
run TestMe
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
>
VM Started:
Exception occurred: java.lang.ClassNotFoundException (uncaught)"thread=main", ja
va.net.URLClassLoader$1.run(), line=202 bci=73

main[1]
Mình không hiểu tại sao lại bị lỗi ClassNotFoundException vì TestMe.class được tạo ra ngay tại thư mục I:\TestingZone. Mình không hề di dời nó đi đâu cả sau khi nó được tạo ra. Bạn nào đó có thể chỉ cho mình lý do mình mắc lỗi này và cách sửa chữa nó được không ? ]]>
/hvaonline/posts/list/36615.html#224939 /hvaonline/posts/list/36615.html#224939 GMT
Rắc rối với jdb - The java debugger http://download.oracle.com/javase/1.3/docs/tooldocs/solaris/jdb.html Khi mình thực hành sử dụng jdb, mình có xem hướng dẫn trên javaworld và cũng không thấy có lưu ý về việc này: http://www.javaworld.com/javaworld/javaqa/2000-06/04-qa-0623-jdb.html Mã nguồn mình dùng để debug mình cũng lấy từ hướng dẫn trên javaworld. Mình đã mất công tìm hiểu về cách sử dụng jdb thì mình nghĩ cũng nên dành ít thời gian trình bày nó. Bạn nào thích command line thì có lẽ cũng sẽ thích dùng thử cái jdb này. Vẫn mã nguồn như trên và file TestMe.java vẫn nằm tại I:\TestingZone. Mình thực hiện debug bằng jdb như sau. Đây là command prompt của mình: Code:
I:\TestingZone>javac -g TestMe.java

I:\TestingZone>jdb -classpath . TestMe
Initializing jdb ...
> stop in TestMe.main
Deferring breakpoint TestMe.main.
It will be set after the class is loaded.
> [b]run[/b]
run TestMe
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
>
VM Started: Set deferred breakpoint TestMe.main

Breakpoint hit: "thread=main", TestMe.main(), line=7 bci=0
7            TestMe testMe = new TestMe();

main[1] step
>
Step completed: "thread=main", TestMe.<init>(), line=14 bci=0
14        public TestMe() {

main[1] step
Chương trình của bạn bị dừng lại tại breakpoint đã set. Ở đây là dòng đầu tiên của main method của class TestMe. Để chạy các dòng lệnh kế tiếp nhau bạn dùng lệnh step. Nếu muốn set breakpoint theo line number thì bạn có thể sử dụng cú pháp sau: stop at <class id>:<line> Bạn cũng có thể in thông tin về các object khi đang debug. Muốn làm được vây, bạn sẽ dùng một số command như print, dump. Ví dụ: Code:
Step completed: "thread=main", TestMe.main(), line=11 bci=24
11              System.out.println(toString);

main[1] print testMe
 testMe = "String value: test int value: 1"
main[1] print testMe.int_value
 testMe.int_value = 1
main[1] dump testMe
 testMe = {
    int_value: 1
    string_value: "test"
}
main[1]
Bạn cũng có thể in ra toàn bộ local variable trong method hiện tại bằnng cách dùng locals Ví dụ: Code:
main[1] locals
Method arguments:
args = instance of java.lang.String[0] (id=335)
Local variables:
testMe = instance of TestMe(id=331)
toString = "String value: test int value: 1"
main[1]
Bạn còn có thể xem được toàn bộ member của một class bằng cách dùng các command: methods fields Ví dụ: Code:
main[1] methods TestMe
** methods list **
TestMe main(java.lang.String[])
TestMe <init>()
TestMe setInt_value(int)
TestMe setString_value(java.lang.String)
TestMe toString()
java.lang.Object <init>()
java.lang.Object registerNatives()
java.lang.Object getClass()
java.lang.Object hashCode()
java.lang.Object equals(java.lang.Object)
java.lang.Object clone()
java.lang.Object toString()
java.lang.Object notify()
java.lang.Object notifyAll()
java.lang.Object wait(long)
java.lang.Object wait(long, int)
java.lang.Object wait()
java.lang.Object finalize()
java.lang.Object <clinit>()
main[1] fields TestMe
** fields list **
int int_value
java.lang.String string_value
Nếu bạn cần quản lý các thread trong chương trình bạn có thể sử dụng lênh threads để xem các thread đang tồn tại trong chương trình của bạn. Ví dụ: Code:
main[1] threads
Group system:
  (java.lang.ref.Reference$ReferenceHandler)0x127 Reference Handler cond. waiting
  (java.lang.ref.Finalizer$FinalizerThread)0x126  Finalizer         cond. waiting
  (java.lang.Thread)0x125                         Signal Dispatcher running
  (java.lang.Thread)0x124                         Attach Listener   running
Group main:
  (java.lang.Thread)0x1                           main              running
main[1]
Nếu muốn tìm hiểu thêm, bạn có thể xem hướng dẫn qua help command. Nguồn tham khảo: - http://www.javaworld.com/javaworld/javaqa/2000-06/04-qa-0623-jdb.html - http://download.oracle.com/javase/1.3/docs/tooldocs/solaris/jdb.html ]]>
/hvaonline/posts/list/36615.html#225155 /hvaonline/posts/list/36615.html#225155 GMT
Rắc rối với jdb - The java debugger /hvaonline/posts/list/36615.html#225156 /hvaonline/posts/list/36615.html#225156 GMT Rắc rối với jdb - The java debugger /hvaonline/posts/list/36615.html#225203 /hvaonline/posts/list/36615.html#225203 GMT