那是2007年三月二日,我發了<
定位Java類中的每個方法在類文件中的位置>引起了幾個大蝦的注意并且給我指點,當時看了以后也沒有怎么弄,也不知道怎么弄.
這是cape給我的建議:
最直接的辦法應該是分析class的bytecode,找到每個Method_info->Code Attribute->LineNumberTable Attribute今天空閑得慌而是我拿這個method linenumber幾個keyword在網上狂搜了一把,
http://www.ibm.com/developerworks/cn/java/j-dyn0302/index.html
得到美文一篇,用Javassist來做. Javassist是一個專門操控java class的bytecode的類,可以動態的改變其狀態,我沒有深究它到底有多大的能耐,有興趣可以去它的官方網站看看,
http://www.csg.is.titech.ac.jp/~chiba/javassist/但是它確實可以象cape指點的那樣,讓我實現對java類中的每個方法的定位(得到類中的某個方法的lineRange)
而是我就隨便翻了幾個例子以后根據在線文檔寫了不到100行代碼輕松搞定。:) 我高興啊。
干這個事情的兩個java的source code可以從這里得到:
http://m.tkk7.com/Files/xmp123/MethodParser.zip
代碼很簡單,我就不解釋代碼了。
這是示例結果:
------------------------------------------------------------------------------------------------------------------------------
Analyzing net.blogjava.xmp123.MyMethodInfo ...
net.blogjava.xmp123.MyMethodInfo.getLineList() locate between 56 and 56
net.blogjava.xmp123.MyMethodInfo.updateLineList() locate between 63 and 80
net.blogjava.xmp123.MyMethodInfo.addLineToLineList(int) locate between 87 and 89
net.blogjava.xmp123.MyMethodInfo.setLineList(java.util.List) locate between 95 and 97
...
------------------------------------------------------------------------------------------------------------------------------
希望這東西有用......
posted on 2007-08-15 17:56
自己的小屋 閱讀(1138)
評論(0) 編輯 收藏