2011-07-14 32 views
0

我有下面的代碼:面對問題與加多寶 - 斷點沒有被擊中

void func() 
{ 
    try 
    { 
    f1() 
    } 
    finally() 
    { 
    if (resource != null) 
     resource.close(); 
    } 
} 

我放三個斷點:調用F1(),裏面F1(),在最終的if語句塊。

看來finally塊中的斷點沒有被擊中。如果在f1()內部的斷點之後,我繼續使用下一個命令,我確實會通過finally塊。

另外如果我在finally塊的兩行上都放置了斷點,斷點確實是第一個斷點。

不確定這是否是由於JDB中的錯誤。有人可以告訴我,如果這是一個已知問題,或者我錯過了什麼?

我在Linux上使用JDK 6。

+0

你需要發佈一個更完整的例子。這太短了,顯然是人造的,而且是越野車。 – g051051

+0

我在執行專有代碼時看到了這個錯誤。我懷疑我是否能夠用獨立的例子重現它。 –

回答

5

我不太明白你看到了什麼意外的行爲,但是JDB在調試if,finally,或者finally裏面沒有問題。如果您看到明顯的跳轉點被跳過,那麼很可能您正在查看與正在運行的字節碼不同的源代碼。這是可能通過拆解它與

javap -c -l <simple class name> 

在同一目錄中的類文件校驗字節碼的行號。它也可以運行如下:

javap -c -l -classpath <build dir> <fully qualified class name> 

它會顯示每個方法包含的所有指令都帶有數字標籤。將會有一個「LineNumberTable」將這些標籤與源代碼行號關聯起來。注意:每個源代碼行通常有很多字節碼指令。

+0

downvote的任何特定原因? –