国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

JDB的簡單使用

2019-11-18 14:04:54
字體:
來源:轉載
供稿:網友

  JDB 的簡單使用
新手可以看看,呵呵

余紹峰 (yusf@emc.eea.tsinghua.edu.cn)
2001 年 4 月

當新手開始學習java時,在一開始的新鮮感后馬上就會發現的一個問題就是如何調試。大家知道在Visual C++中提供了很好的調試工具,使用起來非凡的方便。Java中,以JDK為例,沒有一個方便的圖形界面,所以給新手調試帶來了很多的困難。很多人一開始是用System.out.PRintln()來觀察輸出結果。假如寫的程序很大,這樣的方法就顯然是效率太低。下面結合自己的學習體會簡單談一下Java中的調試工具JDB的使用。
環境:jdk 1.2.2

首先我們寫一個最簡單的小程序,但是它包含了一些最基本的面向對象要素。

class test

{

int a;

int b;

test(int aa,int bb)

{

a = aa;

b = bb;

}

int add()

{return a+b;}

}

public class hehe

{

public static void main(String args[])

{

int a = 2;

int b = 3;

int c= a+b;

System.out.println(c);

test kk=new test(1,2);

System.out.println(kk.add());

}

}



存為hehe.java后,用javac -g hehe.java進行編譯。用參數g是為了產生各種調試信息,不用就無法調試。假如這里碰到問題,請參考Helloworld攻略。上面的程序是可以通過的,可以直接用java hehe運行。下面結合該例子談談JDB的使用。

首先鍵入jdb hehe 假如出現下面信息,說明系統沒有找到調試的類。此時可以用java -classpath . hehe命令解決。

C:javasource>jdb hehe

Initializing jdb...

hehe not found

>



假如出現一下信息,說明開始進行調試,一切正常。假如是調試Applet,則用 appletviewer -debug hehe.Html命令進行調試

C:javasource>jdb -classpath . hehe

Initializing jdb...

0xb0:class(hehe)

>



回想VC中的調試,應該是設置斷點,然后再進行跟蹤。Java中也是一樣。用stop命令進行斷點設置。然后用 run 命令開始調試,運行程序到斷點,這里斷點是設置在 main 主函數中。

> stop at hehe:18

Breakpoint set at hehe:18

> run

run hehe

running ...

main[1]

Breakpoint hit: hehe.main (hehe:18)

main[1]



此時可以用locals命令查看變量,用step命令進入下一條命令,也可以用單獨一個stop命令來查看斷點的設置情況。注重此時b還沒有被賦值。 main[1] locals

Method arguments:

Local variables:

args =

a = 2

main[1] step

main[1]

Breakpoint hit: hehe.main (hehe:19)

main[1]



當運行到System.out.println()函數時,會出現一下提示:

main[1] step

main[1]

Breakpoint hit: java.lang.ClassLoader.loadClass (ClassLoader:247)

這個是因為我們跟蹤進去了println方法,我們一般沒有必要這樣做,此時可以用next跳過該方法進入到下一條一句。step的含義是進入函數跟蹤,next是轉入下一條語句執行。我們隨時可以鍵入 locals 和 list 命令來查看變量值和當前運行的代碼。下面箭頭指到地方即為當前程序運行到的地方。

main[1] next

main[1]

Breakpoint hit: hehe.main (hehe:20)

main[1] list

16 {

17 int a = 2;

18 int b = 3;

19 int c= a+b;

20 => System.out.println(c);

21 test kk=new test(1,2);

22 System.out.println(kk.add());

23

24 }

main[1]

接下來的問題自然是如何查看對象。當程序運行到new命令處時,鍵入locals,可以看到 main[1] step

main[1]

Breakpoint hit: test. (test:5)

main[1] list

1 class test

2 {

3 int a;

4 int b;

5 => test(int aa,int bb)

6 {

7 a = aa;

8 b = bb;

9 }

main[1] locals

Method arguments:

Local variables:

this = test@64fd6722

aa = 1

bb = 2

main[1]

可以看到此時顯示的變量值是類test中構造函數中的變量值。this對象即為當前構造的對象。可以用dump命令進行查看。

main[1] dump this

this = (test)0x11a {

int b = 0

int a = 0

}

也可以在main函數中用dump kk和print命令命令進行對象查看 main[1] dump kk

kk = (test)0x11a {

int b = 2

int a = 1

}

main[1] print kk

kk = test@64fd6722

main[1] print kk.a

kk.a = 1

main[1] print kk.b

kk.b = 2

最后鍵入cont命令,假如沒有其他斷點,程序就直接運行完畢退出。調試結束。 main[1] cont

3



> Current thread "main" died. Execution continuing...

>

hehe exited



上述操作中的斷點都是設置在main函數中的,假如要設置在調用的類方法中,則要用 stop in yourclassname.functionname 命令來進行設置,比如說: > stop in test.add

Breakpoint set in test.add

> run

run hehe

running ...

main[1] 5

Breakpoint hit: test.add (test:11)

main[1] list

7 a = aa;

8 b = bb;

9 }

10 int add()

11 => {return a+b;}

12 }

13 public class hehe

14 {

15 public static void main(String args[])

main[1]



這樣的話,我們已經可以在程序中的幾乎所有需要地方的地方進行斷點設置并進行跟蹤,查看變量。
JDB還有很多的調試手段,除了上面那些最常用的,其他很重要的還有clear清除斷點,use設置源程序路徑,memory顯示當前內存使用狀況,gc強制進行內存回收,!!重復上面的命令,thread設置當前線程,quit和exit退出jdb等,還有遠程調試等內容,都很有用。這里就不一一介紹了。

關于作者
余紹峰,大四學生,有近一年的 VC 編程經驗。出于愛好,于 2001 年開始學習 Java 歡迎各位高手新手多多提批評意見,共同學習,共同進步。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 澳门| 柳河县| 合川市| 邵东县| 独山县| 沈阳市| 修武县| 社旗县| 汪清县| 海丰县| 右玉县| 浠水县| 定襄县| 肇州县| 长兴县| 郎溪县| 长武县| 深泽县| 图们市| 文成县| 乌拉特后旗| 白山市| 怀集县| 庐江县| 和硕县| 广东省| 调兵山市| 会宁县| 色达县| 开平市| 西藏| 三亚市| 义马市| 贡嘎县| 静安区| 北京市| 江陵县| 虎林市| 凤凰县| 清苑县| 旺苍县|